1、命令简介

cp(Copy file):将源文件复制至目标文件,或将多个源文件复制至目标目录。

2、用法

cp [选项]... [-T] 源文件 目标文件

或:cp [选项]… 源文件… 目录

 或:cp [选项]… -t 目录 源文件…

3、选项


-a, --archive 等于-dR --preserve=all,与同时指定 -dpR 这三个选项效果一样,用于复制整个目录,包括目录中的子目录等都递归的复制,而且还要保持文件的访问模式,所有者,时间戳等属性与原文件一样。
–backup[=CONTROL 为每个已存在的目标文件创建备份 -b 类似–backup 但不接受参数
–copy-contents 在递归处理是复制特殊文件内容 -d 等于–no-dereference --preserve=links -f, --force
如果目标文件无法打开则将其移除并重试(当 -n 选项存在时则不需再选此项) -i, --interactive
覆盖前询问(使前面的 -n 选项失效),默认cp命令覆盖目标文件时是不会提示的,很多Linux发行版里的cp都被设置别名​​cp -i​​,其实作用就是给用户一个提醒。如果你不想被提示,那么请这样输入:\cp source target,或者使用cp命令的绝对路径/bin/cp -H 跟随源文件中的命令行符号链接 -l,
–link 对源文件建立硬链接,而非复制文件

-L, --dereference        总是跟随符号链接   -n, --no-clobber        不要覆盖已存在的文件(使前面的 -i 选项失效)   -P, --no-dereference        不跟随源文件中的符号链接

-p 等于–preserve=模式,所有权,时间戳
–preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr 等 -c
same as --preserve=context
–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
复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件

-Z, --context=CONTEXT        set security context of copy to CONTEXT


4、实例

实例1:将文件a.txt复制成文件b.txt

bennyrhys@ubuntu:~/Desktop/test1$ ls
mk1.txt
bennyrhys@ubuntu:~/Desktop/test1$ cp mk1.txt mk2.txt
cp: -r not specified; omitting directory 'mk1.txt'
bennyrhys@ubuntu:~/Desktop/test1$ cp -r mk1.txt mk2.txt
bennyrhys@ubuntu:~/Desktop/test1$ ls
mk1.txt mk2.txt


注意:加-r
这样就可以成功的解决了。
解释一下: -r 这个options 是递归的意思。


实例2:将文件a.txt复制成文件b.txt,显示详细信息

bennyrhys@ubuntu:~/Desktop/test1$ ls
mk1.txt
bennyrhys@ubuntu:~/Desktop/test1$ cp -v mk1.txt mk2.txt
cp: -r not specified; omitting directory 'mk1.txt'
bennyrhys@ubuntu:~/Desktop/test1$ cp -vr mk1.txt mk2.txt
'mk1.txt' -> 'mk2.txt'

实例3:复制文件,只有源文件较目的文件的修改时间新时,才复制文件

bennyrhys@ubuntu:~/Desktop/test1$ ls
mk1.txt mk2.txt
bennyrhys@ubuntu:~/Desktop/test1$ cp -ruv mk2.txt mk1.txt
'mk2.txt' -> 'mk1.txt/mk2.txt'
bennyrhys@ubuntu:~/Desktop/test1$ ls
mk1.txt mk2.txt
bennyrhys@ubuntu:~/Desktop/test1$ cp -ruv mk2.txt mk3.txt
'mk2.txt' -> 'mk3.txt'