rm -d
和rm -R
命令之间有什么区别?根据rm
命令的手册页:
rm -d
尝试删除目录以及其他类型的目录
文件。rm -R
尝试删除以每个文件为根的文件层次结构
论点。 -R选项表示-d选项。现在,我知道最后一句话(-R
暗示-d
),这似乎可以回答我的问题。但是,我仍然想知道为什么两个命令标志首先存在,如果它们在他们所做的事情上被认为是相同的。
此外,因为我仍然在学习Bash,我认为最好知道哪个选项是Bash程序员(传统上)的首选,以及为什么。
答案 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
。