一 简介
cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。
[root@Nagios ~]# alias
alias cp='cp -i'
二 命令格式
cp [选项]... [-T] 源 目的
或:cp [选项]... 源... 目录
或:cp [选项]... -t 目录 源...
三 常用参数
-a, --archive 等于-dR--preserve=all
--backup[=CONTROL 为每个已存在的目标文件创建备份
-i,--interactive 覆盖前询问(使前面的 -n 选项失效)
-l,--link 链接文件而不复制
-L,--dereference 总是跟随符号链接
-n,--no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-R,-r, --recursive 递归复制目录及其子目录内的所有内容
四 不常用参数
-a, --archive 等于-dR --preserve=all
--backup[=CONTROL 为每个已存在的目标文件创建备份
-b 类似--backup 但不接受参数
--copy-contents 在递归处理是复制特殊文件内容
-d 等于--no-dereference--preserve=links
-f,--force 如果目标文件无法打开则将其移除并重试(当 -n 选项
存在时则不需再选此项)
-i,--interactive 覆盖前询问(使前面的 -n 选项失效)
-H 跟随源文件中的命令行符号链接
-l,--link 链接文件而不复制
-L,--dereference 总是跟随符号链接
-n,--no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P,--no-dereference 不跟随源文件中的符号链接
-p 等于--preserve=模式,所有权,时间戳
--preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果
可能保持附加属性:环境、链接、xattr 等
-c sameas --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 copy only whenthe SOURCE file is newer
than thedestination file or when the
destination file is missing
-v,--verbose explain what isbeing done
-x,--one-file-system stay on thisfile system
-Z,--context=CONTEXT set securitycontext of copy to CONTEXT
--help 显示此帮助信息并退出
--version 显示版本信息并退出
五 示例
5.1 复制单个文件到目录,文件目标不存在
[bzfys@Nagiost1]$ tree
.
├── t2
├── t3
│?? └── t2
└── t4
[bzfys@Nagios t1]$ cp t4 ./t3/
[bzfys@Nagiost1]$ tree
.
├── t2
├── t3
│?? ├── t2
│?? └── t4
└── t4
5.1 复制单个文件到目录,文件目标存在,加-a与不加-a区别
[root@Nagiost1]# ll
总用量 8
drwxrwxr-x 2 bzfys bzfys 4096 6月 18 09:16 t2
drwxrwxr-x 3 bzfys bzfys 4096 6月 18 09:18 t3
-rw-rw-r-- 1 bzfys bzfys 0 6月 18 09:17 t4
[root@Nagiost1]# cp t4 t3/
cp:是否覆盖"t3/t4"? y
[root@Nagiost1]# ll t3/
总用量 4
drwxrwxr-x 2 bzfys bzfys 4096 6月 18 09:16 t2
-rw-rw-r-- 1 bzfys bzfys 0 6月 18 09:22 t4
[root@Nagiost1]# cp -p t4 t3/
cp:是否覆盖"t3/t4"? y
[root@Nagiost1]# ll t3/
总用量 4
drwxrwxr-x 2 bzfys bzfys 4096 6月 18 09:16 t2
-rw-rw-r-- 1 bzfys bzfys 0 6月 18 09:17 t4
不难看出,如果有-p参数拷贝的文件时间戳等属性也不会变
5.2 复制目录
[root@Nagiost1]# cp t3 t5
cp: 略过目录"t3"
[root@Nagiost1]# cp -a t3 t5
[root@Nagiost1]# tree
.
├── t2
├── t3
│?? ├── t2
│?? └── t4
├── t4
└── t5
├── t2
└── t4
5 directories, 3 files
可以看出如果要复制目录需要-a或者-r参数(-r参数后面演示)
5.3 复制一个目录到另一个目录
[root@Nagiost1]# cp t3 t6/
cp: 略过目录"t3
[root@Nagiost1]# cp -r t3 t6
[root@Nagiost1]# tree
.
├── t2
├── t3
│?? ├── t2
│?? └── t4
├── t4
├── t5
│?? ├── t2
│?? └── t4
└── t6
└── t3
├── t2
└── t4
8 directories, 4 files
[root@Nagiost1]# cp -r t3/ t6/
cp:是否覆盖"t6/t3/t4"? y
[root@Nagiost1]# tree
.
├── t2
├── t3
│?? ├── t2
│?? └── t4
├── t4
├── t5
│?? ├── t2
│?? └── t4
└── t6
└── t3
├── t2
└── t
我们可以看出,加不加/最后的结果是一样的
六 参考资料
http://gnu.org/licenses/gpl.html
man手册