sal*_*rus 19 options coreutils rm
通过阅读 GNU coreutils 手册页rm
,其中一个选项是-f
,根据手册,
-f, --force
ignore nonexistent files and arguments, never prompt
Run Code Online (Sandbox Code Playgroud)
现在,我做了一些测试并证明如果我使用类似的东西
rm -f /nonexisting/directory/
Run Code Online (Sandbox Code Playgroud)
它不会抱怨。
人们可以从这样的选择中真正获得什么?
另外,使用“删除目录”的最常见示例rm
类似于
rm -rf /delete/this/dir
Run Code Online (Sandbox Code Playgroud)
这个-r
选项是有道理的,但是-f
?
phu*_*ehe 12
我发现手册页在这种情况下缺少一些细节。的-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
Run Code Online (Sandbox Code Playgroud)
因此,如果您使用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
Run Code Online (Sandbox Code Playgroud)
removes myapp
,如果它们存在,foo.o
并且bar.o
如果它们中的任何一个不存在,则不会抱怨。
-f
在大多数情况下,不需要包含在删除目录树的说明中。这是有道理的,因为如果您确定要删除该目录树,而不管其中包含什么,那么您可以指定-f
避免在某些文件是只读的情况下收到提示。然而,人们对谁跑说rm -rf
往往只是在重复一个神秘的咒语摆脱的东西,不管是否选择-r
和-f
有实际需要。如果选项不是必需的,则不建议使用,因为它们会增加论证中的拼写错误会破坏重要内容的风险。