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