cp
【功能说明】:
copy files and directories ## 复制文件或者目录
★ cp 可同时复制多个文件,但最后一个必须是目录
★ 复制文件时,目标文件可以用新文件名
【语法格式】:
cp [OPTION]... SOURCE... DIRECTORY
【选项参数】:
参数 | 说明 |
-a, --archive | 相当于 �Cpdr 参数的效果,常用于拷贝目录或者备份 |
-i, --interactive | 若目标文件已存在,在覆盖之前先询问 |
-r, -R, --recursive | 递归处理,连同目录下面的所有文件与子目录一起复制(复制的文件会使用默认属性) |
-p, --preserve | 保留源文件的属性,而非使用默认属性(备份常用) |
-d, --no-dereference | 若源文件是连接文件,则复制连接文件,而不是原始文件(默认情况下,复制的是原始文件) |
-f, --force | 为强制(force)的意思,若目标文件已存在且无法开启,则删除后再尝试一次 |
-l, --link | 进行硬连接文件的创建,而非复制文件本身 |
-s, --symbolic-link | 复制成为软连接文件,即“快捷方式”文件 |
-u, --update | 当源文件比目标文件更新时,才更新目标文件(个人判断:新旧是以修改时间进行对比) |
【实践操作】:
1、把目录/tmp/aa备份到目录/data下面,并保留原来的属性
[root@Mode /]# cp -a /tmp/aa/ /data/
[root@Mode /]# ll /tmp/aa/ /data/aa/
/data/aa/:
total 4
-rw-r--r--. 1 root root 0 May 16 22:34 a.txt
drwxr-xr-x. 2 root root 4096 May 16 22:34 bb
/tmp/aa/:
total 4
-rw-r--r--. 1 root root 0 May 16 22:34 a.txt
drwxr-xr-x. 2 root root 4096 May 16 22:34 bb
2、把文件/tmp/aa/a.txt 拷贝到/data/aa/ ,如果目标文件存在,覆盖前先询问
[root@Mode /]# cp -i /tmp/aa/a.txt /data/aa/
cp: overwrite `/data/aa/a.txt'? y
3、把目录/tmp/aa拷贝到目录/data下面(注意与 �Ca 参数的区别,文件属性有变化了)
[root@Mode /]# cp -r /tmp/aa/ /data/
[root@Mode /]# ll /tmp/aa/ /data/aa/
/data/aa/:
total 4
-rw-r--r--. 1 root root 0 May 17 08:41 a.txt
drwxr-xr-x. 2 root root 4096 May 17 08:41 bb
/tmp/aa/:
total 4
-rw-r--r--. 1 root root 0 May 16 22:34 a.txt
drwxr-xr-x. 2 root root 4096 May 16 22:34 bb
4、把软连接文件/tmp/b_link 拷贝到/data/目录下 (注意加 �Cd 参数的区别)
[root@Mode /]# cp /tmp/b_link /data/b_link1
[root@Mode /]# cp -d /tmp/b_link /data/b_link2
[root@Mode /]# ll /tmp/b_link /data/b_link*
-rw-r--r--. 1 root root 10 May 17 08:56 /data/b_link1
lrwxrwxrwx. 1 root root 6 May 17 08:56 /data/b_link2 -> /b.txt
lrwxrwxrwx. 1 root root 6 May 17 08:52 /tmp/b_link -> /b.txt
5、把文件/b.txt 强制复制到/data/目录下,不管目标文件是否存在
[root@Mode /]# cp /b.txt /data/
cp: overwrite `/data/b.txt'? y
[root@Mode /]# cp -f /b.txt /data/
cp: overwrite `/data/b.txt'? y
疑问:上面还是会询问是否覆盖?
猜测:man里面解释要目标文件存在且无法打开时,才不会询问
6、在/tmp目录下创建/b.txt文件的硬连接文件
[root@Mode /]# cp /b.txt /data/
[root@Mode /]# cp -l /b.txt /tmp/
[root@Mode /]# ll -i /b.txt /data/b.txt /tmp/b.txt
4682 -rw-r--r--. 2 root root 10 May 17 08:48 /b.txt
4683 -rw-r--r--. 1 root root 10 May 17 09:03 /data/b.txt
4682 -rw-r--r--. 2 root root 10 May 17 08:48 /tmp/b.txt
7、把/b.txt 文件备份到/data/目录下,命名为b2 ,并要求保留原来属性
[root@Mode /]# cp /b.txt /data/b1
[root@Mode /]# cp -p /b.txt /data/b2
[root@Mode /]# ll /b.txt /data/b*
-rw-r--r--. 2 root root 10 May 17 08:48 /b.txt
-rw-r--r--. 1 root root 10 May 17 09:08 /data/b1
-rw-r--r--. 1 root root 10 May 17 08:48 /data/b2
8、在/data/目录下创建/b.txt文件的软连接文件
[root@Mode /]# cp -s /b.txt /data/b3
[root@Mode /]# ll /data/b*
-rw-r--r--. 1 root root 10 May 17 09:08 /data/b1
-rw-r--r--. 1 root root 10 May 17 08:48 /data/b2
lrwxrwxrwx. 1 root root 6 May 17 09:14 /data/b3 -> /b.txt
9、把日志文件/b.txt 拷贝到/data/目录下,重命名为b1,若目标文件b1版本更新,则该操作不进行
[root@Mode /]# echo "change once again" >> /b.txt
[root@Mode /]# echo "chang b1 ">> /data/b1
[root@Mode /]# cp -u /b.txt /data/b1
[root@Mode /]# cat /b.txt /data/b1
I am file
I am new than b1
change once again
I am file
I am new than b1
chang b1
[root@Mode /]#
[root@Mode /]# echo "change b1 again" >>/data/b1
[root@Mode /]# echo "change twice again" >> /b.txt
[root@Mode /]# cp -u /b.txt /data/b1
cp: overwrite `/data/b1'? y
[root@Mode /]#
[root@Mode /]# cat /b.txt /data/b1
I am file
I am new than b1
change once again
change twice again
I am file
I am new than b1
change once again
change twice again
【技巧拓展】:
1、同时复制多个文件,注意: 最后一个必须是已存在的目录
[root@Mode tmp]# cp a.txt b.txt c.txt /data/
[root@Mode tmp]# ls /data/
a.txt b.txt c.txt
[root@Mode tmp]#
[root@Mode tmp]# cp a.txt b.txt c.txt /dataadsf/
cp: target `/dataadsf/' is not a directory
2、把/tmp/目录下的文件复制到/test/目录下,而不复制tmp 目录本身
[root@Mode tmp]# cp -a /tmp/ /data/
[root@Mode tmp]# cp -a /tmp/* /test/
[root@Mode tmp]# ls -a /tmp/ /test/ /data/
/data/:
. .. tmp
/test/:
. .. a.txt b.txt c.txt
/tmp/:
. .. a.txt b.txt c.txt .ICE-unix
3、接上题,想把/tmp/目录下的所有文件复制到/test/目录下(包括隐藏文件),但又不复制tmp 目录本身
暂未找到方法