cp 命令

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 目录本身

暂未找到方法


你可能感兴趣的:(linux,命令,cp)