You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
6.4 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# **cp**
## 说明
**cp命令** 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件
或一个已经存在的目录下。cp命令还支持同时复制多个文件当一次复制多个文件时目标文件参数必须是一个已经存在的目录否则将出现错误
## 选项
```markdown
用法cp [选项]... [-T] 源文件 目标文件
 cp [选项]... 源文件... 目录
 cp [选项]... -t 目录 源文件...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
必选参数对长短选项同时适用
-a, --archive 等于-dR --preserve=all
--attributes-only 仅复制属性而不复制数据 --backup[=CONTROL为每个已存在的目标文件创建备份
-b 类似--backup 但不接受参数
--copy-contents 在递归处理是复制特殊文件内容
-d 等于--no-dereference --preserve=links,当复制符号连接时,把目标文件或目录也建立为符号连接
并指向与源文件或目录连接的原始文件或目录
-f, --force 强行复制文件或目录,不论目标文件或目录是否已存在强行复制文件或目录,不论目标文件或目录是否已存在
-i, --interactive 覆盖既有文件之前先询问用户
-H follow command-line symbolic links in SOURCE
-l, --link 对源文件建立硬连接,而非复制文件
-L, --dereference always follow symbolic links in SOURCE
-n, --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P, --no-dereference 不跟随源文件中的符号链接
-p 等于--preserve=模式,所有权,时间戳
--preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如 果
可能保持附加属性环境、链接、xattr 等
--sno-preserve=属性列表 不保留指定的文件属性
--parents 复制前在目标目录创建来源文件路径中的所有目录
-R, -r, --recursive 递归复制目录及其子目录内的所有内容
--reflink[=WHEN] 控制克隆/CoW 副本。请查看下面的内如
--remove-destination 尝试打开目标文件前先删除已存在的目的地
文件 (相对于 --force 选项)
--sparse=WHEN 控制创建稀疏文件的方式
--strip-trailing-slashes 删除参数中所有源文件/目录末端的斜杠
-s, --symbolic-link 只创建符号链接而不复制文件
-S, --suffix=后缀 自行指定备份文件的后缀
-t, --target-directory=目录 将所有参数指定的源文件/目录
复制至目标目录
-T, --no-target-directory 将目标目录视作普通文件
-u, --update 只在源文件比目标文件新,或目标文件
不存在时才进行复制
-v, --verbose 显示详细的进行步骤
-x, --one-file-system 不跨越文件系统进行操作
-Z set SELinux security context of destination
file to default type
--context[=CTX] like -Z, or if CTX is specified then set the
SELinux or SMACK security context to CTX
默认情况下,源文件的稀疏性仅仅通过简单的方法判断,对应的目标文件目标文件也
被为稀疏。这是因为默认情况下使用了--sparse=auto 参数。如果明确使用
--sparse=always 参数则不论源文件是否包含足够长的0 序列也将目标文件创文
建为稀疏件
使用--sparse=never 参数禁止创建稀疏文件
当指定了--reflink[=always] 参数时执行轻量化的复制,即只在数据块被修改的
情况下才复制。如果复制失败或者同时指定了--reflink=auto则返回标准复制模式
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:
none, off 不进行备份(即使使用了--backup 选项)
numbered, t 备份文件加上数字进行排序
existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never 永远使用普通方式备份
有一个特别情况:如果同时指定--force 和--backup 选项,而源文件和目标文件
是同一个已存在的一般文件的话cp 会将源文件备份
* 源文件制定源文件列表。默认情况下cp命令不能复制目录如果要复制目录则必须使用`-R`选项
* 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录
```
## 实例
```bash
# 所有目标文件指定的目录必须是己经存在的cp命令不能创建目录。如果没有文件复制的权限则系统会显示出错信息
cp -ruv /usr/men/tmp ~/men/tmp # 只拷贝新的文件到我的存储设备上就用cp的“u更新”和“v详细”选项
cp --force --backup=numbered test1.py test1.py # --backup=numbered参数表示做带编号的连续备份第一个备份就是1号第二个就是2号
cp file /usr/men/tmp/file1 # 将文件file复制到目录`/usr/men/tmp`下并改名为file1
# 在Linux下使用cp命令复制文件时候有时候会需要覆盖一些同名文件覆盖文件的时候都会有提示需要不停的按Y来确定执行覆盖
# 文件数量不多还好但是要是几百个估计按Y都要吐血了于是折腾来半天总结了一个方法
cp aaa/* /bbb # 复制目录aaa下所有到/bbb目录下这时如果/bbb目录下有和aaa同名的文件需要按Y来确认并且会略过aaa目录下的子目录
cp -r aaa/* /bbb # 这次依然需要按Y来确认操作但是没有忽略子目录
cp -r -a aaa/* /bbb # 依然需要按Y来确认操作并且把aaa目录以及子目录和文件属性也传递到了/bbb
\cp -r -a aaa/* /bbb # 成功没有提示按Y、传递了目录属性、没有略过目录
```