cp 命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp 命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
命令
格式
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
选项
- -a, --archive
- 此参数的效果和同时指定 `-dR` 参数相同。
- --attributes-only
- 不拷贝文件的数据,只复制文件的属性信息。
- --backup[=CONTROL]
- 为每个已存在的目标文件创建备份。
- -b
- 和`--backup`选项类似,区别是不接受参数。
- --copy-contents
- 递归复制指定的文件内容。
- -d
- 等同于 `--no-dereference --preserve=links`。
- -f, --force
- 强行复制文件或目录,不论目标文件或目录是否已存在(当选项`-n` 存在时,则不需再选此项)。
- -i, --interactive
- 覆盖既有文件之前先询问用户。
- -H
- 跟随源文件中的命令行符号链接。
- -l, --link
- 对源文件建立硬连接,而非复制文件。
- -L, --dereference
- 总是跟随符号链接。
- -n, --no-clobber
- 不要覆盖已存在的文件(使前面的 `-i` 选项失效)。
- -P, --no-dereference
- 不跟随源文件中的符号链接。
- -p
- 等于 --preserve=模式,所有权,时间戳。
- --preserve[=ATTR_LIST]
- --preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果 可能保持附加属性:环境、链接、xattr 等。
- -c
- 等同于 `--preserve=context`。
- --no-preserve=ATTR_LIST
- 不保留指定的文件属性。
- --parents
- 复制前在目标目录创建来源文件路径中的所有目录。
- -R, -r, --recursive
- 递归处理,将指定目录下的所有文件与子目录一并处理。
- --reflink[=WHEN]
- 控制克隆/CoW 副本。
- --remove-destination
- 尝试打开目标文件前先删除已存在的目的地文件(相对于 --force 选项)。
- --sparse=WHEN
- 控制创建稀疏文件的方式。
- --strip-trailing-slashes
- 删除参数中所有源文件/目录末端的斜杠。
- -s, --symbolic-link
- 只创建软链接而不复制文件。
- -S, --suffix=SUFFIX
- 在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀。
- -t, --target-directory=DIRECTORY
- 将所有参数指定的源文件/目录复制至目标目录。
- -T, --no-target-directory
- 将目标目录视作普通文件。
- -u, --update
- 使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件。
- -v, --verbose
- 详细显示命令执行的操作。
- -x, --one-file-system
- 保留当前的文件系统形式。
- -Z
- 对目标文件设置 SELinux 的安全上下文。
- --context[=CTX]
- 与 `-Z` 一样。
- --help
- 显示帮助信息并退出。
- --version
- 显示版本信息并退出。
常用命令
linux 复制文件夹到另一个目录
复制文件夹需要增加 `-r` 选项,如下 source 文件复制到 target。
cp -r source target
cp 递归复制不存在的目标文件
cp 命令没有提供可递归复制目标子目录的选项,需要结合 mkdir 命令一起使用:
mkdir -p "$target" && cp file "$target"
更多信息可参考 cp 命令目标目录不存在时,如何自动递归创建不存在的子目录。
cp 强制复制不提示
命令最前面加反斜杠 \ 即可跳过别名生效范围:
\cp knowledge.json dict.json
更多信息可参考 linux cp 复制命令强制覆盖不提示的方法。