2012-08-15 507 views
6

问题

  • 是在什么猛砸rm -drm -R命令之间的区别?
  • 我应该使用哪一个?

详细

根据该rm命令手册页:Bash:“rm -d”和“rm -R”有什么区别?

  • rm -d尝试删除目录以及其他类型的 文件。
  • rm -R尝试删除以每个文件 参数为根的文件层次结构。 -R选项意味着-d选项。

现在,我知道最后的声明(-R意味着-d),这似乎回答了我的问题。然而,我仍然想知道为什么两个命令标记首先存在,如果它们在做什么时被认为是相同的。另外,因为我仍然在学习Bash,所以我认为知道哪个选项是Bash程序员(通常)中的首选选项,以及为什么,这是很好的。

+0

有什么奇怪的是你的人在讨论?我的沼气标准GNU coreutils rm没有-d选项。 – themel 2012-08-15 20:38:56

+1

'rm'的BSD版本具有'-d'。 POSIX标准说,当目标是一个目录时,'rm'应该与'rmdir'具有相同的行为,除非使用'-d',否则BSD版本遵循'rm'的历史行为。 – chepner 2012-08-15 20:43:24

+0

'-d'选项不在[POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/rm.html)中,所以这个问题应该标记为问题所在的特定系统执导。 – 2016-08-06 11:09:06

回答

9

通常,rm不会删除目录,即使它是空的。 rm -d只是使rm行为像rmdir。它仍然拒绝删除该目录,如果它不是空的,但它会这样做,如果它是空的。

rm -R是完全递归删除,删除目录及其所有内容。

我从来没有用过-d,因为我不知道它存在,并且总是只使用rmdir。如果您只想删除目录(如果它实际上是空的),我会使用rmdir/rm -d。保存rm -R,当您完全知道您正在尝试删除目录及其所有内容时。

3

-d选项特别适用于您在Mac上可能找到的rm的BSD实现。它不在GNU实现中,你会在Linux系统上找到它。

如果您正在寻找首选项,那么将使用-r(小写字母)来移除整棵树,使用rmdir来移除单个目录,您会发现它们是更便携的代码。

-1

只是要清楚,你应该永远不要使用rm -d。假设它不会因“操作不允许”错误消息而失败,它将删除目录,而不删除内容。在一个空目录上,它与rmdir相同。在非空目录上,它会在需要通过fsck进行修复的文件系统或某些非常聪明的手动黑客攻击中创建不一致。

这是一个愚蠢的选择,应该永远不会存在。当BSD的人添加它时,他们正在使用一些不好的药物。至少自1973年rm -r已经在UNIX和rmdir自1971年以来

+2

如果目录不为空,那么对于我来说'rm -d'失败,并且“目录不为空”。也许行为在某个时候改变了。 – chepner 2013-02-07 13:48:18

0

RM会删除文件,但我有问题试图删除目录,所以还需要一些选项被标记,

RM -f将强制删除文件,而不要求确认

RM-R将删除目录,但在我的情况下被要求确认,但因为我有这么多的文件,我一直在键入y和y,将其吸收为永恒

rm -Rf是我的最终解决方案,它强制删除目录而不用提问g确认