【问题标题】:Bash: What's the difference between "rm -d" and "rm -R"?Bash:“rm -d”和“rm -R”有什么区别?
【发布时间】:2012-08-12 04:39:59
【问题描述】:

问题

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

详情

根据rm 命令的手册页:

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

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

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

【问题讨论】:

  • 你们在讨论什么奇怪的 rm ?我的沼泽标准 GNU coreutils rm 没有 -d 选项。
  • rm 的 BSD 版本有 -d。 POSIX 标准规定,当目标是目录时,rm 的行为应与 rmdir 相同,而 BSD 版本遵循 rm 的历史行为,除非您使用 -d
  • -d 选项不在POSIX 中,因此应针对问题指向的特定系统标记此问题。

标签: bash terminal rm


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    这是一个本不应该存在的愚蠢选项。 BSD 的人在添加时服用了一些不良药物。 rm -r 至少从 1973 年开始就在 UNIX 中,rmdir 从 1971 年开始。

    【讨论】:

    • rm -d 如果目录不为空,则对我来说“目录不为空”失败。也许行为在某个时候发生了变化。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-10-26
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 2014-06-26
        • 1970-01-01
        • 2021-04-09
        • 2011-06-02
        相关资源
        最近更新 更多