8

问题

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

细节

根据rm命令的手册页:

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

现在,我知道最后一个陈述(-R暗示-d),这似乎回答了我的问题。但是,我仍然想知道为什么两个命令标志首先存在,如果它们在它们的作用上被认为是相同的。

此外,由于我仍在学习 Bash,我认为最好知道哪个选项是 Bash 程序员(通常)的首选,以及为什么。

4

4 回答 4

10

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

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

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

于 2012-08-15T20:37:48.973 回答
3

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

如果您正在寻找首选的选择,那就是使用-r(小写)来删除整个树并rmdir删除单个目录,您会发现这些代码更具可移植性。

于 2012-08-15T20:45:08.377 回答
1

rm 将删除文件,但我在尝试删除目录时遇到问题,因此需要使用某些选项对其进行标记,

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

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

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

于 2016-08-06T10:29:08.750 回答
-1

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

这是一个不应该存在的愚蠢选择。BSD 的人在添加时服用了一些不良药物。rm -r至少从 1973 年和rmdir1971 年就开始使用 UNIX。

于 2012-08-15T21:05:23.307 回答