cp命令学习

复制文件

cp
复制文件是计算机用户经常做的工作之一,cp用于复制文件和目录。使用cp命令最简单的方法就是输入命令,后面再输入你想复制的文件,然后是被复制文件的新名称。可以把该命令的结构看作是“cp正在从哪复制的文件 正在复制到哪的文件”。这种关系的另一种常见表达方式是“cp 源文件目标文件”。

$ pwd
/home/scott/libby
$ ls
libby.jpg
$ cp libby.jpg libby_bak.jpg
$ ls
libby_bak.jpg libby.jpg

例子非常简单:将图片复制到源文件所在的相同目录中。也可以将文件复制到另一个目录中,甚至可以从非当前工作目录复制到文件系统的其他任何目录。

$ pwd
/home/scott
$ ls ~/libby
libby_bak.jpg  libby.jpg
$ cp pix/libby_arrowrock.jpg libby/arrowrock.jpg
$ ls ~/libby
arrowrock.jpg libby_bak.jpg libby.jpg

这个例子中使用的文件名相同(都是libby_closeup.jpg),没关系,因为是要将这个文件复制到另外一个目录中。但是,在第一个cp命令的例子中,必须使用新的文件名称,用libby_bak.jpg代替libby.jpg,因为这是在将一个文件复制到同一目录。
如果你想从其他目录复制文件到当前工作目录(你目前所在的目录),只需要使用.。当然,如果使用.就不能更改文件名称,因为它只是原来文件名称的快捷方式。

$ pwd
/home/scott/libby
$ ls
libby_bak.jpg libby.jpg
$ cp pix/libby_arrowrock.jpg .
$ ls
arrowrock.jpg libby_bak.jpg libby.jpg

如果直接将目标文件复制到指定的目录中,则不需要指定目标文件的文件名,只需提供目录名就可以了。

$ ls -l
drwxr-xr-x   224 2005-10-20 12:34 libby
drwxr-xr-x   216 2005-09-29 23:17 music
drwxr-xr-x  1.6K 2005-10-16 12:34 pix
$ ls libby
arrowrock.jpg  libby.jpg
$ cp pix/libby_on_couch.jpg libby
$ ls libby
arrowrock.jpg  libby.jpg  libby_on_couch.jpg

在上个例子中,必须确保名为libby的目录已经存在,以便能将libby_on_couch.jpg复制到其中。否则,最终将在home目录中生成一个名为libby的文件。

使用通配符复制文件

cp *
用通配符一次将多个文件复制到目录中。将非常节约时间,因为这样你可以准确地指定一组文件。

$ pwd
/home/scott/libby
$ ls ~/pix
arrowrock.jpg  by_pool_03.jpg on_floor_03.jpg
by_pool_01.jpg on_floor_01.jpg on_floor_04.jpg
by_pool_02.jpg on_floor_02.jpg
$ ls
arrowrock.jpg libby.jpg libby_on_couch.jpg
$ cp ~/pix/by_pool*.jpg .
$ ls
arrowrock.jpg by_pool_02.jpg on_couch.jpg
by_pool_01.jpg by_pool_03.jpg libby.jpg

可以使用的通配符并不只限于“*”。实际上,还可以使用方括号([]),通过匹配“[”和“]”之间的任意字符来更准确地指定你想要复制哪些文件。如果你想复制前三个on_floor图片,但是不需要复制第四个,用带通配符的cp命令就能很容易地实现。

$ pwd
/home/scott/libby
$ ls ~/pix
arrowrock.jpg  by_pool_03.jpg  on_floor_03.jpg
by_pool_01.jpg on_floor_01.jpg on_floor_04.jpg
by_pool_02.jpg on_floor_02.jpg
$ ls
arrowrock.jpg  libby.jpg  libby_on_couch.jpg
$ cp ~/pix/on_floor_0[1-3].jpg .
$ ls
arrowrock.jpg  libby_on_couch.jpg  on_floor_02.jpg
libby.jpg      on_floor_01.jpg     on_floor_03.jpg

复制文件时显示执行过程

cp -v
增加-v选项(或–verbose),则可以在cp命令完成复制任务的同时显示其进度。

$ pwd
/home/scott/libby
$ ls ~/pix
arrowrock.jpg  by_pool_03.jpg  on_floor_03.jpg
by_pool_01.jpg on_floor_01.jpg on_floor_04.jpg
by_pool_02.jpg on_floor_02.jpg
$ ls
arrowrock.jpg  libby.jpg  libby_on_couch.jpg
$ cp -v ~/pix/on_floor_0[1-3].jpg .
'/home/scott/pix/on_floor_01.jpg'
➥-> './on_floor_01.jpg'
'/home/scott/pix/on_floor_02.jpg'
➥->'./on_floor_02.jpg'
'/home/scott/pix/on_floor_03.jpg'
➥->'./on_floor_03.jpg'
$ ls
arrowrock.jpg  libby_on_couch.jpg  on_floor_02.jpg
libby.jpg      on_floor_01.jpg     on_floor_03.jpg

-v选项能够让你对cp命令的执行过程了如指掌。-v选项能够确保需要的文件事实上已经复制成功了。

防止复制时覆盖重要的文件

cp -i
因为Linux是这样运行的:它假设你知道自己在做什么,所以它不会警告你将要覆盖什么文件,除非你要求它这么做。如果你需要在使用cp命令覆盖文件前得到预警,则可以使用-i选项(或–interactive)。

$ pwd
/home/scott/libby
$ ls ~/pix
arrowrock.jpg  by_pool_03.jpg  on_floor_03.jpg
by_pool_01.jpg on_floor_01.jpg on_floor_04.jpg
by_pool_02.jpg on_floor_02.jpg$ ls
arrowrock.jpg  libby_on_couch.jpg  on_floor_02.jpg
libby.jpg      on_floor_01.jpg     on_floor_03.jpg
$ cp -i ~/pix/on_floor_0[1-3].jpg .
cp: overwrite './on_floor_01.jpg'?

cp命令询问你是否要覆盖它准备开始复制的第一个文件libby_on_floor_01.jpg。如果你想继续并复制这个文件,输入y,否则就输入n。如果你选择输入n,并不意味着cp命令会完全停下来,相反,它会询问你下一个文件如何处置,再下一个文件,直至最后。唯一能够停止整个复制过程的方法就是按Ctrl+c取消命令的执行。同样的,也没有办法提前为所有问题选择yes,所以如果你也打算使用-i选项,将1 000个文件复制为具有相同名称的其他1 000个文件,那么你一定要确保有充足的时间可以坐在电脑前,和你的shell进行交互,因为如果你真的要覆盖文件的话,将被询问1 000次。
警告 对于普通用户来说,通常不需要使用-i选项。但是对于root用户来说,它的责任非常重要。如果root用户错误地覆盖了一个关键的系统文件,则会导致系统出现大问题。因此,在root用户的.bashrc文件中为cp命令创建一个别名是个不错的主意,用cp–i来代替cp。

  alias cp= 'cp -i'

复制目录

cp -R
有时需要复制目录。但是,你不能仅输入“cp 源目录 目标目录”,因为它不会如你预想的那样,虽然目录复制了,但却没有复制里面的文件。
如果想要复制目录,还需要包含-R选项(或–recursive),这个选项和ls命令的相应选项差不多。增加了-R选项意味着目录和它的内容都会被复制。

$ pwd
/home/scott
$ ls -l
drwxr-xr-x   328 2005-10-17 14:42 documents
drwxr-xr-x   240 2005-10-20 17:16 libby

$ cp -R libby libby_bak
$ ls -l
drwxr-xr-x   328 2005-10-17 14:42 documents
drwxr-xr-x   240 2005-10-20 17:16 libby
drwxr-xr-x   240 2005-10-20 17:17 libby_bak

复制文件到其他目录以作为完整的备份

cp -a
或许你现在正在想cp命令可以用来备份文件。只要使用几行bash shell脚本,cp命令也可以作为备份各种文件和目录的有效方法。在这种情况下最有用的选项就是-a选项(或–archive),它相当于以下几个选项的组合:-dpR(或–no-dereference --preserve–recursive)。有关-a选项的另一种说法是:-a选项可以确保cp命令不会复制符号链接的内容(否则可能会极大地增加复制量),只保存关键的文件属性(例如拥有者、时间戳),并递归处理子目录。

$ pwd
/home/scott
$ ls -l
drwxr-xr-x     216 2005-10-21 11:31 libby
drwxr-xr-x     216 2005-09-29 23:17 music
$ ls -lR libby
libby:
total 312
-rw-r--r--   73786 2005-10-20 12:12 arrowrock.jpg
-rw-r--r--   18034 2005-04-19 00:57 libby.jpg
-rw-r--r--  198557 2005-04-19 00:57 on_couch.jpg
drwxr-xr-x     168 2005-10-21 11:31 on_floor

libby/on_floor:
total 764
-rw-r--r--  218849 2005-10-20 16:11 on_floor_01.jpg
-rw-r--r--  200024 2005-10-20 16:11 on_floor_02.jpg
-rw-r--r--  358986 2005-10-20 16:11 on_floor_03.jpg
$ cp -a libby libby_bak
$ ls -l
drwxr-xr-x    216 2005-10-21 11:31 libby
drwxr-xr-x    216 2005-10-21 11:31 libby_bak/
drwxr-xr-x    216 2005-09-29 23:17 music
$ ls -lR libby_bak
libby:
total 312
-rw-r--r--   73786 2005-10-20 12:12 arrowrock.jpg
-rw-r--r--   18034 2005-04-19 00:57 libby.jpg
-rw-r--r--  198557 2005-04-19 00:57 on_couch.jpg
drwxr-xr-x     168 2005-10-21 11:31 on_floor

libby/on_floor:
total 764
-rw-r--r-- 218849 2005-10-20 16:11 on_floor_01.jpg
-rw-r--r-- 200024 2005-10-20 16:11 on_floor_02.jpg
-rw-r--r-- 358986 2005-10-20 16:11 on_floor_03.jpg
  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天南地北飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值