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
在Makefile
s 上使用目标
-i
并不是真正的意义-f
,更多的是边缘情况。
-f
不能避免错误退出代码。如果rm
尝试删除现有文件失败,它将返回错误代码。