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

cp -i

上一个例子演示了一些有关于cp命令的重要内容,这是你需要了解的。在2.27节的例子中,将3个on_floor图片复制到libby目录中;在上一个示例中,再次将相同的3个图片再次复制到libby目录中。你要复制的目标文件早已存在了,但是cp命令不会发出警告,因为Linux是这样运行的:它假设你知道自己在做什么,所以它不会警告你将要覆盖什么文件,除非你要求它这么做。如果你需要在使用cp命令覆盖文件前得到预警,则可以使用-i选项(或--interactive)。这一次使用-i选项再试着复制相同的文件,将得到不同的结果。

  1. $ pwd
  2. /home/scott/libby
  3. $ ls ~/pix
  4. arrowrock.jpg by_pool_03.jpg on_floor_03.jpg
  5. by_pool_01.jpg on_floor_01.jpg on_floor_04.jpg
  6. by_pool_02.jpg on_floor_02.jpg$ ls
  7. arrowrock.jpg libby_on_couch.jpg on_floor_02.jpg
  8. libby.jpg on_floor_01.jpg on_floor_03.jpg
  9. $ cp -i ~/pix/on_floor_0[1-3].jpg .
  10. 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

  1. alias cp= 'cp -i'