我正在与一位朋友讨论,试图找出为什么 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 file
pipe
semaphore
rm
删除文件(包括普通文件、设备文件、管道文件)
rmdir
删除一个目录。
rm
- 默认情况下不删除目录。
rmdir
- 默认情况下不会删除非空目录。
rm -d
- 使 rm 接受目录和文件,但它只会删除空目录(就像rmdir
)。
rm -r
- 当它移回到树上时,将递归到树的底部并删除文件和目录。它首先删除文件,因此当它尝试删除文件时,目录将为空。
rmdir -p a/b/c
删除一个目录及其父目录,但仅当目录为空时才会删除该目录。给定目录结构 a/b/c 然后rmdir -p a/b/c
和rm -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。