为什么 rmdir 不能递归工作?

为什么 rmdir 不能递归工作?

rmdir仅删除一个空目录。rm -rf使用递归删除。

  • 为什么没有rmdir递归选项?从逻辑上讲,当我删除一个目录,我想用rmdir
  • 鉴于rm除了最简单的情况外,它都用于删除目录,为什么它rmdir存在呢?该功能包含在rm.

这只是历史的偶然吗?

答案1

取消链接目录原本是一种特权操作

取消目录链接也是非法的(超级用户除外)。

于是rmdir就实施了作为一个只删除目录的小二进制文件,当时涉及删除目录内部的...,然后是目录本身。rmdir被设计为 setuid root;它使用以下命令执行单独的权限测试access判断是否允许真实用户删除目录。与任何 setuid root 二进制文件一样,最好保持简单且集中。

rm -r实际上使用这个单独的二进制文件根据需要删除目录。

看来rm -r和之间的持久差异rmdir是这种最初差异的结果。

据推测,由于rm很早就获得了递归删除的能力,并且rmdir应该具有很小的职权范围,因此从未认为提供rmdir递归删除的能力本身是有用的。

答案2

递归 rmdir 的替代方案(这会很方便)如下所示:

find . -depth -type d -exec rmdir {} \;

这只会删除空目录,如果其中一些目录不为空,则会出现许多无害的错误。

递归 rmdir 可能更聪明,当出现错误时会中止子树,而不是继续出现级联错误,但可能不会更快。

正如所指出的, rmdir 确实有这个-p选项,但它并不完全是递归的。如上所述使用 find 的能力可能会消除为其添加递归选项的动机,因为优势很小。

相关内容