为什么 rm 默认情况下不递归工作?

为什么 rm 默认情况下不递归工作?

我正在与一位朋友讨论,试图找出为什么 rm 命令不能自动检查路径是否为文件或文件夹,并在默认情况下递归删除它(如有必要)。对于一项相当常见的任务,始终不需要“-r”。我知道我可以为此设置一个别名。但我真正想要的是知道原因(我认为存在一个很好的原因,我只是不知道)。

答案1

至于真正的原因,你应该询问作者。我只能告诉你这是一个非常好的做法:

维基百科关于铁路空气制动的文章

西屋公司的系统利用气压为每辆汽车上的储气罐(储气罐)充气。满气压会向每辆车发出释放刹车的信号。气压降低或损失会向每辆车发出信号,利用其储气罐中的压缩空气进行制动。

这意味着默认状态是正在施加制动。您需要努力释放它并使火车处于潜在危险状态。

当然,它rm首先并不能解释为什么有两种模式(递归和非递归)。也许这就是你所问的。然而,事实上,将更安全的默认设置是正确的做法。

答案2

第二个假设是递归模式是事后才想到的。

毕竟普通rm也不安全。而且不一定是均匀的更安全,因为不同的文件并不同等重要或不可替代。您想删除什么:从 Github 克隆的目录,带标志-r/boot/vmlinuz*不带-r选项。

你搬起rm石头砸自己的脚。但是当rm -r你射击你看到的每一只脚时,如果你幸运的话,那些脚都不是你自己的。

并且rm -r做一些与 plain 完全不同的事情rm,它必须 unlink(2) 沿着树走下的每个文件,然后 rmdir(2) 空目录。

答案3

Afile与 a 不同,也不与 a 、、等directory相同......block or character device filepipesemaphore

rm删除文件(包括普通文件、设备文件、管道文件)

rmdir删除一个目录。

rm- 默认情况下不删除目录。

rmdir- 默认情况下不会删除非空目录。

rm -d- 使 rm 接受目录和文件,但它只会删除空目录(就像rmdir)。

rm -r- 当它移回到树上时,将递归到树的底部并删除文件和目录。它首先删除文件,因此当它尝试删除文件时,目录将为空。

rmdir -p a/b/c删除一个目录及其父目录,但仅当目录为空时才会删除该目录。给定目录结构 a/b/c 然后rmdir -p a/b/crm -r a几乎是逆命令,除了rm -r会删除非空目录之外,rmdir会抱怨。

这为我们提供了一个非常灵活的系统。

没有什么可以阻止您创建自己的别名,

`别名 ZapIt='rm -r $*'

mkdir -p a/b/c ; touch a/b/c/fc1
ZapIt a

将删除 a/b/c/fc1 a/b/ca/b 和 a。

相关内容