用法:cp [OPTION]... [-T] SOURCE DEST
 或:cp [OPTION]... SOURCE... DIRECTORY
 或:cp [OPTION]... -t DIRECTORY SOURCE...
把 SOURCE 复制到 DEST, 或者把多个 SOURCE 复制到 DIRECTORY.

  -a, --archive			            复制所有的文件和目录,包括它们的属性,权限。
                                    等于-dR --preserve=all
      --attributes-only	            仅复制属性而不复制数据      
      --backup[=CONTROL]		    为每个已存在的目标文件创建备份
  -b				                类似--backup 但不接受参数
      --copy-contents		        在递归处理时复制特殊文件内容
  -d				                等于--no-dereference --preserve=links
  -f, --force                       如果一个存在的目标文件不能打开,删除它并重试
                                    (这个效果在 -n 也被使用时会被忽略)
  -i, --interactive                 覆盖前提示 (使前面的 -n 选项失效)
  -H                                跟随 SOURCE 的软链接
  -l, --link                        不复制,而是创造硬链接
  -L, --dereference                 总是跟随 SOURCE 的软链接
  -n, --no-clobber		            不要覆盖已存在的文件(使前面的 -i 选项失效)
  -P, --no-dereference		        不跟随 SOURCE 的符号链接
  -p				                等于--preserve=mode,ownership,
                                    timestamps
      --preserve[=ATTR_LIST]	    保持指定的属性
                                    (默认:mode,ownership,timestamps),            
                                    如果可能保持附加属性:
                                    context,link,xattr,all
  -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		        自行指定备份文件的后缀
  -t,  --target-directory=DIRECTORY	将所有参数指定的源文件/目录复制至目标目录
  -T, --no-target-directory	        将 DEST 视作普通文件
  -u, --update			            只在源文件比目标文件新,或目标文件不存在时
                                    才进行复制
  -v, --verbose		                显示详细的步骤
  -x, --one-file-system	            不跨越文件系统进行操作
  -Z                                设置 DEST 的 SeLinux 安全上下文为默认类型
      --context[=CTX]               类似 -Z, 或者如果 CTX 已经指定,设置
                                    SELinux 安全上下文或者 SMACK 安全上下文
                                    的值是 CTX
      --help		                显示此帮助信息并退出
      --version		                显示版本信息并退出

默认情况下,SOURCE 的稀疏性仅仅通过简单的方法判断,对应的 DEST 也被当做
有稀疏性。这是因为默认情况下使用了--sparse=auto 参数。如果明确使用
--sparse=always 参数则不论 SOURCE 是否包含足够长的0序列也将 DEST 创
建为稀疏文件。使用--sparse=never 参数禁止创建稀疏文件。

当指定了--reflink[=always] 参数时执行轻量化的复制,即只在数据块被修改的
情况下才复制。如果复制失败或者同时指定了--reflink=auto,则返回标准复制模式。
指定--reflink=never 进行标准复制。

如果不使用 --suffix 或 SIMPLE_BACKUP_SUFFIX 指定后缀, 备份文件的后缀是 '~'
在使用 --backup 选项 或 VERSION_CONTROL 环境变量时,版本控制方法有可能会生效
下边是可选值:

  none, off       不进行备份(即使使用了--backup 选项)
  numbered, t     备份文件加上数字进行排序
  existing, nil   若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
  simple, never   永远使用普通方式备份

有一个特别情况:如果同时指定--force 和--backup 选项,而 SOURCE 和 DEST
是同一个已存在的一般文件的话,cp 会将 SOURCE 备份。

 使用示例:

1. cp file1 file2: 如果file2存在,覆盖file2,如果不存在,新建file2

file2存在:

[root@server dir]# cat file1
123
[root@server dir]# cat file2
[root@server dir]# cp file1 file2
[root@server dir]# cat file1
123
[root@server dir]# cat file2
123

file2不存在: 

[root@server dir]# cat file1
123
[root@server dir]# cat file2
cat: file2: 没有那个文件或目录
[root@server dir]# cp file1 file2
[root@server dir]# cat file2
123

2. cp -i file1 file2:操作前打印提示信息

[root@server dir]# cp -i file1 file2
cp:是否覆盖"file2"? y

3. cp file1 file2 dir1: 在dir1存在的情况下,把file1和file2复制到dir1下边:

# dir1存在的情况
[root@server dir]# ll dir1
总用量 0
[root@server dir]# cp file1 file2 dir1
[root@server dir]# ll dir1
总用量 8
-rw-r--r-- 1 root root 4 12月  1 22:31 file1
-rw-r--r-- 1 root root 4 12月  1 22:31 file2

# dir1不存在的情况
[root@server dir]# rm dir1 -rf
[root@server dir]# ll
总用量 20
drwxr-xr-x 2 root root 4096 12月  1 16:29 dir2
drwxr-xr-x 3 root root 4096 12月  1 16:11 dir3
-rw-r--r-- 1 root root    4 12月  1 18:05 file1
-rw-r--r-- 1 root root    4 12月  1 18:08 file2
-rw-r--r-- 1 root root    0 11月 28 15:12 file3
-rw-r--r-- 1 root root    0 11月 29 14:41 file4
-rw-r--r-- 1 root root  164 11月 28 16:41 file.zip
[root@server dir]# cp file1 file2 dir1
cp: 目标"dir1" 不是目录

4. cp dir1/* dir2: 把dir1的所有文件复制到dir2中:

# dir2存在的情况
[root@server dir]# ll dir1
总用量 8
-rw-r--r-- 1 root root 4 12月  1 22:33 file1
-rw-r--r-- 1 root root 4 12月  1 22:33 file2
[root@server dir]# ll dir2
总用量 0
[root@server dir]# cp dir1/* dir2
[root@server dir]# ll dir2
总用量 8
-rw-r--r-- 1 root root 4 12月  1 22:35 file1
-rw-r--r-- 1 root root 4 12月  1 22:35 file2

# dir2不存在的情况
[root@server dir]# rm dir2 -rf
[root@server dir]# cp dir1/* dir2
cp: 目标"dir2" 不是目录

5. cp -r dir1 dir2: 如果dir2存在,把dir1和它里边的文件复制到dir2里边,如果dir2不存在,新建dir2,将dir1中的文件复制到dir2中。

# dir2存在的情况
[root@server dir]# ll dir1
总用量 8
-rw-r--r-- 1 root root 4 12月  1 22:33 file1
-rw-r--r-- 1 root root 4 12月  1 22:33 file2
[root@server dir]# cp -r dir1 dir2
[root@server dir]# ll dir2
总用量 4
drwxr-xr-x 2 root root 4096 12月  1 22:54 dir1
[root@server dir]# ll dir2/dir1
总用量 8
-rw-r--r-- 1 root root 4 12月  1 22:54 file1
-rw-r--r-- 1 root root 4 12月  1 22:54 file2

# dir2不存在的情况
[root@server dir]# rm dir2 -rf
[root@server dir]# cp -r dir1 dir2
[root@server dir]# ll dir2
总用量 8
-rw-r--r-- 1 root root 4 12月  1 23:00 file1
-rw-r--r-- 1 root root 4 12月  1 23:00 file2

6. cp -v :显示过程:

[root@server dir]# cp -rv dir1 dir2
"dir1" -> "dir2"
"dir1/file2" -> "dir2/file2"
"dir1/file1" -> "dir2/file1"

有可能会遇到在使用linux过程中执行cp,默认提示确认信息,这是因为系统已预配置了alias: 

[root@server dir]# alias cp
alias cp='cp -i'

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐