Answers:
我发现在这种情况下手册页缺少一些细节。实际上,该-f选项rm有很多用例:
没错,删除不存在的文件是没有意义的,但是在脚本中说“我不想要这些文件,如果找到它们就删除它们,但是如果它们找不到它们就不要打扰我”确实很方便不存在”。某些人set -e在脚本中使用,这样它将在发生任何错误时停止运行(以避免脚本可能造成的任何进一步损害),并且rm -rf /home/my/garbage比容易if [[ -f /home/my/garbage ]]; then rm -r /home/my/garbage; fi。
有关权限检查的注意事项:要删除文件,您需要对父目录的写权限,而不是文件本身的写权限。因此,让我们以某种方式说说root,您的主目录中拥有一个文件,并且您无权sudo访问,您仍然可以使用-f选项删除该文件。如果您使用Git,则可以看到Git对其创建的目标文件没有写权限:
-r--r--r-- 1 phunehehe phunehehe 62 Aug 31 15:08 testdir/.git/objects/7e/70e8a2a874283163c63d61900b8ba173e5a83c
因此,如果您使用rm,则不使用而删除Git存储库的唯一方法root就是使用rm -rf。
该-f选项在删除只读文件时禁止确认提示。当提供的一个或多个文件不存在时,它还可以抑制错误。
-f当您知道要删除的某些文件可能是只读的,并且不想收到有关该文件的提示时,此选项很有用。
f当您想删除某些文件(如果它们存在)并且不想关心它们是否存在时,该选项也很有用。这是makefiles中非常常用的命令,用于执行删除可从源文件重新生成的文件的命令。例如,如果foo.o可以从重建foo.c,bar.o可以从重建bar.c,myapp可以从foo.o和重建bar.o,则makefile目标
clean:
rm -f *.o myapp
移除了myapp,foo.o并且bar.o如果它们存在,如果其中任何一个不存在不抱怨。
-f在大多数情况下,不需要在说明中包括删除目录树。这是有道理的,因为如果您确定要删除该目录树而不管其中有什么目录,那么您可以指定-f以避免在某些文件为只读的情况下得到提示。但是,说跑步的rm -rf人常常只是在重复神秘的咒语以摆脱某些东西,而不管选择-r和-f实际是否必要。如果不需要这些选项,则不建议使用它们,因为它们增加了参数中的错字会破坏某些重要内容的风险。
-i开关rm我通常会在命令-f加上别名rm时看到与一起使用,rm以便它包括-i用于交互的开关。该-f开关抵消了-i。
用rm作为别名来模拟问题rm -i。
$ alias rm='rm -i'
制作一些虚假数据
$ touch afile
现在尝试使用别名版本删除它 rm
$ rm afile
rm: remove regular empty file `afile'?
现在尝试使用 -f
$ rm -f afile
$
另外,我相信在某些情况下您具有对目录的只读访问权,并且当您尝试删除该目录中的文件和/或子目录时,您将收到类似提示“您确定吗?”的挑战。使用-f摆脱了不得不说“是”的麻烦。
\rm可以在不使用别名的情况下运行(\是command构建它的快捷方式)。我发现,最好的用法-f是在shell脚本中,其中有诸如锁文件之类的东西可能不存在,可以-f停止rm: cannot remove 'file': No such file or directory警告。
rm -f经常clean在Makefiles 上使用目标
-i并不是真正的意义-f,更多的是边缘情况。
-f不能避免错误退出代码。如果rm尝试删除现有文件失败,它将返回错误代码。