2.40 删除难缠的文件
在结束rm
命令的讨论之前,你应该了解一些这个命令与系统中特定文件之间的关系。首先,不管怎么删除,都不可能删除目录.
和..
,因为它们是保持文件系统层次结构所必需的。况且,为什么非要删除它们呢?就让它们呆在那儿吧。
如何删除名称中带有空格的文件呢?调用rm
命令的普通方法(命令名,后面跟着文件名),是不会起作用的,因为rm
命令认为你说的是两个不同的文件。实际上,删除Cousin Harold的图片并不太难。只需要将文件的名称用引号括起来就可以了。
$ ls
cousin harold.jpg -cousin_roy.jpg cousin_beth.jpg
$ rm cousin harold.jpg
rm: cannot remove 'cousin': No such file or directory
rm: cannot remove 'harold.jpg': No such file or directory
$ rm "cousin harold.jpg"
$ ls
-cousin_roy.jpg cousin_beth.jpg
下面是一个更让人头疼的问题:如何删除名称由“-
”字符开始的文件呢?
$ ls
-cousin_roy.jpg cousin_beth.jpg
$ rm -cousin_roy.jpg
rm: invalid option -- c
Try 'rm --help' for more information.
噢!rm
命令看到“-
”符号时,会认为它是一个选项的开始,但是它并不认识由字母c
开始的选项。接着再遇到的是ousin_roy.jpg
,它更不知道如何处理了。
有两种解决方案。你可以在有问题的文件名称的前面放 “--
”,它会告诉命令:跟在后面的任何东西都不能作为选项,而是文件或文件夹的名称。
$ ls
-cousin_roy.jpg cousin_beth.jpg
$ rm -- -cousin_roy.jpg
$ ls
cousin_beth.jpg
除此以外,还可以使用.作为路径名的一部分,这样,就可以在-
干扰rm
命令,让它以为文件名是实际选项之前就避免这个问题。
$ ls
-cousin_roy.jpg cousin_beth.jpg
$ rm ./-cousin_roy.jpg
$ ls
cousin_beth.jpg
足智多谋的Linux用户总能深入思考想解决问题的办法。还有,不要在文件名开始的地方用连字符。