2.40 删除难缠的文件

在结束rm命令的讨论之前,你应该了解一些这个命令与系统中特定文件之间的关系。首先,不管怎么删除,都不可能删除目录...,因为它们是保持文件系统层次结构所必需的。况且,为什么非要删除它们呢?就让它们呆在那儿吧。

如何删除名称中带有空格的文件呢?调用rm命令的普通方法(命令名,后面跟着文件名),是不会起作用的,因为rm命令认为你说的是两个不同的文件。实际上,删除Cousin Harold的图片并不太难。只需要将文件的名称用引号括起来就可以了。

  1. $ ls
  2. cousin harold.jpg -cousin_roy.jpg cousin_beth.jpg
  3. $ rm cousin harold.jpg
  4. rm: cannot remove 'cousin': No such file or directory
  5. rm: cannot remove 'harold.jpg': No such file or directory
  6. $ rm "cousin harold.jpg"
  7. $ ls
  8. -cousin_roy.jpg cousin_beth.jpg

下面是一个更让人头疼的问题:如何删除名称由“-”字符开始的文件呢?

  1. $ ls
  2. -cousin_roy.jpg cousin_beth.jpg
  3. $ rm -cousin_roy.jpg
  4. rm: invalid option -- c
  5. Try 'rm --help' for more information.

噢!rm命令看到“-”符号时,会认为它是一个选项的开始,但是它并不认识由字母c开始的选项。接着再遇到的是ousin_roy.jpg,它更不知道如何处理了。

有两种解决方案。你可以在有问题的文件名称的前面放 “--”,它会告诉命令:跟在后面的任何东西都不能作为选项,而是文件或文件夹的名称。

  1. $ ls
  2. -cousin_roy.jpg cousin_beth.jpg
  3. $ rm -- -cousin_roy.jpg
  4. $ ls
  5. cousin_beth.jpg

除此以外,还可以使用.作为路径名的一部分,这样,就可以在-干扰rm命令,让它以为文件名是实际选项之前就避免这个问题。

  1. $ ls
  2. -cousin_roy.jpg cousin_beth.jpg
  3. $ rm ./-cousin_roy.jpg
  4. $ ls
  5. cousin_beth.jpg

足智多谋的Linux用户总能深入思考想解决问题的办法。还有,不要在文件名开始的地方用连字符。