Bash:“rm -d”和“rm -R”有什么区别?

时间:2012-08-15 20:34:59

标签: bash terminal rm

问题

  • Bash中的rm -drm -R命令之间有什么区别?
  • 我应该使用哪一个?

详细

根据rm命令的手册页:

  • rm -d尝试删除目录以及其他类型的目录              文件。
  • rm -R尝试删除以每个文件为根的文件层次结构              论点。 -R选项表示-d选项。

现在,我知道最后一句话(-R暗示-d),这似乎可以回答我的问题。但是,我仍然想知道为什么两个命令标志首先存在,如果它们在他们所做的事情上被认为是相同的。

此外,因为我仍然在学习Bash,我认为最好知道哪个选项是Bash程序员(传统上)的首选,以及为什么。

4 个答案:

答案 0 :(得分:9)

通常,rm不会删除目录,即使它是空的。 rm -d只是让rm表现得像rmdir。如果目录不为空,它仍然拒绝删除该目录,但如果该目录为空则会拒绝删除。

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

我从未使用-d,因为我不知道它存在并始终只使用rmdir。如果您只想删除目录,那么我会使用rmdir / rm -d,实际上它是空的。当您完全意识到要删除目录及其所有内容时,请保存rm -R

答案 1 :(得分:3)

-d选项特定于rm的BSD实现,这是您可能在Mac上找到的实现。它不会出现在Linux系统上的GNU实现中。

如果您正在寻找首选,那么可以使用-r(小写)删除整个树,使用rmdir删除单个目录,您会发现这些代码更多便携式的。

答案 2 :(得分:0)

rm将删除文件,但我在尝试删除目录时遇到问题,因此需要标记一些选项,

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

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

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

答案 3 :(得分:-1)

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

这是一个绝不应该存在的愚蠢选择。当他们添加它时,BSD人员会使用一些不良药物。 rm -r至少从1973年开始在UNIX中运行,自1971年以来一直在rmdir