码迷,mamicode.com
首页 > 其他好文 > 详细

cp 命令

时间:2015-05-20 15:06:50      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:命令   linux   cp   

cp

【功能说明】:

copy files and directories  ## 复制文件或者目录

★ cp 可同时复制多个文件,但最后一个必须是目录

★ 复制文件时,目标文件可以用新文件名


【语法格式】:

cp  [OPTION]... SOURCE... DIRECTORY

 

【选项参数】:

参数说明
-a, --archive相当于 –pdr 参数的效果,常用于拷贝目录或者备份
-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下面(注意与 –a 参数的区别,文件属性有变化了)

[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/目录下 (注意加 –d 参数的区别)

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

暂未找到方法


本文出自 “密度” 博客,请务必保留此出处http://sunwj.blog.51cto.com/5969096/1653040

cp 命令

标签:命令   linux   cp   

原文地址:http://sunwj.blog.51cto.com/5969096/1653040

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!