为什么 rm 需要 -r 用于空文件夹?

Tho*_*mas 2 linux bash history

一直困扰着我的一件事:

touch a
rm a
Run Code Online (Sandbox Code Playgroud)

好的,它按预期工作

mkdir a
rm a
Run Code Online (Sandbox Code Playgroud)

需要 -r 才能工作;但我不明白什么是递归?如果文件夹为空,则没有任何递归。我希望 rm a 尝试删除 a,如果它不是空的并且 rm -r 递归地删除 a 的内容,则会失败。

为什么会这样?

编辑:这个问题已被标记为一个完全不相关的问题的重复。我的问题可以总结为:为什么我需要一个递归标志来执行非递归操作: mkdir a, rm -ra 对此没有任何递归。这与另一个问题无关,即为什么默认情况下 rm 不是递归的。

Gar*_*aro 6

这是因为rm根本不打算删除目录。

最初rm不支持-r,用户只有 1 个选项:删除目录中的所有文件,rm然后删除(现在为空的)目录rmdir

显然,这样的工作非常烦人,因此-r实施以解决此问题。

但是,如果rm /some/empty/dir它开始工作,它将不再向后兼容(因此它可能会破坏假设rm /some/empty/dir失败的旧代码)。有了-r因为这种行为还没有确定这是不是一个问题(因为-r选项还不存在)