cp 复制文件或目录

时间:2021-10-30 11:33:44

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]#