理解 rm 命令中的 -R 标志和 *

理解 rm 命令中的 -R 标志和 *

在 OS X 10.9 中使用 rm 命令时,我意外删除了整个磁盘。

据我理解,我使用的命令是:sudo rm -Rfv /Volumes/Disk/AppName\!\ Whatever\ X.app/Contents/Resources/* “Resources”目录中的所有内容都将被删除,包括包含文件的文件夹,这就是我使用“R”标志的原因。“v”确实短暂地向我显示了受影响的文件,但我在几秒钟内关闭了窗口。使用“f”标志可能是一个错误,但如果没有它,问题文件夹就不会被删除。

给定的路径是否不会将命令限制在该目录中?如何以更安全的方式给出命令,将其限制为仅路径的内容?

我使用 rm 的原因是“Resources”目录包含一个拒绝删除的文件,因为它“包含”不可见的文件,即使显示不可见文件,也不会被替换或放入垃圾箱。这个文件肯定有可能以某种方式指向整个磁盘,这就是所有内容被删除的原因。这对你来说似乎是一个可能的解释吗?

我测试过这个外部磁盘是否有错误,但每次都恢复正常。这是一个新的 3TB 驱动器。

答案1

在 OS X 10.9 中使用 rm 命令时,我意外删除了整个磁盘。

我不明白该命令如何删除整个磁盘的内容。

据我了解,我使用的命令是:sudo rm -Rfv /Volumes/Disk/AppName!\ Whatever\ X.app/Contents/Resources/* “Resources”目录内的所有内容都将被删除,包括包含文件的文件夹。

正确的。

给定的路径是否没有将命令限制在该目录?

确实如此,并且在您给出的示例中,您仔细转义了所有空格。现在,如果您没有这样做,并且最终在路径中出现未转义的空格,那么命令可能最终会像这样:

rm -Rfv /Volumes/Disk/ AppName\!\Whatever\ X.app/Contents/Resources/*

请注意,我并不是说你这样做了,但这是唯一能想到的可以删除 /Volumes/Disk/ 下挂载的所有内容的方法

如何以更安全的方式发出命令并将其限制为仅路径的内容?

您可以先 cd 到想要删除文件的位置。

cd /Volumes/Disk/AppName\!\ Whatever\ X.app/Contents/Resources/
rm -Rfv * 

使用 rm 时务必小心,无论是递归还是强制 (-R 和 -f)。 尤其是以 root 身份 (cq sudo'd) 时。

答案2

“rm”命令在 *nix 系统(包括 OSX 所基于的 BSD)中是相同的

因此请参阅“man rm”来了解开关的解释。

-R 表示递归,也就是说它将循环遍历指定路径的所有子目录。由于此命令不会遍历软链接,因此您可以确保它仅限于目录。

相关内容