1. 命令功能
cp --copy files and directories。复制文件或目录。
2. 语法格式
cp [option] source des
cp [option] source directory
cp [option] -t directory source
参数 |
参数说明 |
-a |
--archive 相当于drp结合使用 |
-d |
如果文件为链接文件,复制链接文件的源文件而非链接文件 |
-r |
递归复制目录(包含目录下的多级子目录) |
-p |
连同文件的属性一起复制过去,而非预设属性 |
-f |
force强制复制,若有重复或其他问题,不询问使用者,而强制复制 |
-i |
当目的文件已存在,在覆盖前会先询问是否真的复制 |
-s |
复制成为符号链接文件,即“快捷方式”文件 |
-u |
若destination比source旧才更新destination |
-t |
默认情况下命令格式为cp 源文件 目标文件,使用-t 可以颠倒顺序 格式为 cp –t 目标文件 源文件 |
说明:当来源文件有两个以上,则最后一个目的文件一定要是目录才行。
3. 使用范例
基础范例
范例1 cp –a,把源文件的全部属性复制到目标目录,不带参数和代参数-a的比较。
[root@localhost home]# pwd
/home
[root@localhost home]# ls -l /home/cxf/test_cxf
-rw-rw-r--. 1 cxf cxf 12 Mar 13 18:05 /home/cxf/test_cxf
[root@localhost home]#
[root@localhost home]# cp /home/cxf/test_cxf /home/DIR/
[root@localhost home]# ls -l /home/DIR/test_cxf
-rw-r--r--. 1 root root 12 Mar 13 18:07 /home/DIR/test_cxf #文件属组发生了变化
[root@localhost DIR]# cp -a /home/cxf/test_cxf /home/DIR/
[root@localhost DIR]# ls -l test_cxf
-rw-rw-r--. 1 cxf cxf 12 Mar 13 18:05 test_cxf #带 –a参数 复制文件属性
通过带参数和不带参数比较文件修改时间属性:
[root@localhost DIR]# ls -lh /home/cxf/test_cxf
-rw-rw-r--. 1 cxf cxf 12 Mar 13 18:05 /home/cxf/test_cxf #源文件修改时间属性
[root@localhost DIR]# cp /home/cxf/test_cxf .
[root@localhost DIR]# ls -lh test_cxf
-rw-r--r--. 1 root root 12 Mar 13 22:27 test_cxf #时间属性发生变化、
[root@localhost DIR]# cp -p /home/cxf/test_cxf test_cxf_1 #复制文件并改名
[root@localhost DIR]# ls -lh test_cxf_1
-rw-rw-r--. 1 cxf cxf 12 Mar 13 18:05 test_cxf_1 #时间属性没有改变,故-a选项会连同文件属性,时间属性一同复制。
范例2 :-i参数实例
[root@localhost DIR]# cp -i /home/cxf/test_cxf .
cp: overwrite `./test_cxf'? y
[root@localhost DIR]# cp /home/cxf/test_cxf . #为什么不带-i,也提示?
cp: overwrite `./test_cxf'? y #由于centos默认为cp设置了别名在,
增加了-i的参数。
[root@localhost DIR]# alias cp
alias cp='cp -i'
在shell脚本中执行cp时,若没有-i参数,则不会询问是否覆盖,由于命令行和shell脚本执行时的环境变量不同,在脚本中一般使用命令的全路径。
范例3 使用-r参数复制目录
[root@localhost home]# cp /root DIR/
cp: omitting directory `/root' #复制root到DIR,提示会跳过目录/root,复制不成功。
[root@localhost home]# cp /root DIR/ -r #把root目录复制到DIR目录中
[root@localhost home]# ls -l DIR/
total 12
dr-xr-x---. 4 root root 4096 Mar 13 22:41 root #复制root目录成功
-rw-r--r--. 1 root root 12 Mar 13 22:34 test_cxf
-rw-rw-r--. 1 cxf cxf 12 Mar 13 18:05 test_cxf_1
2. 技巧性范例
范例4 cp覆盖文件前不提示是否覆盖的几种方法。
第一种:使用命令全路径。
[root@localhost DIR]# cp /home/cxf/test_cxf .
cp: overwrite `./test_cxf'? y
[root@localhost DIR]# /bin/cp /home/cxf/test_cxf .
[root@localhost DIR]#
第二种:取消cp别名 unalias cp 重启后失效
第三种:命令开头使用反斜线(\)
[root@localhost DIR]# \cp /home/cxf/test_cxf . #使用反斜线屏蔽系统别名。
[root@localhost DIR]#