【发布时间】:2016-02-09 20:16:05
【问题描述】:
为什么 find ... -delete 比 rm -rf 快这么多?具体来说,
澄清一下:我特意问:为什么find ./x -type d -delete && rm -rf x 比rm -rf x/ 快这么多?
背景
有一些人使用类似的机制,比如 rsync。
有几篇关于为什么
rm -rf速度慢的帖子。例如,https://unix.stackexchange.com/questions/106133/why-is-rm-slow 可能是最受关注的之一。具体来说,我发现
cd dir-to-delete && find . -type d -delete后跟rm -rf dir-to-delete速度非常快,即使在大型目录中也是如此。
【问题讨论】:
-
unix.stackexchange.com 可能是问这个问题的更好地方。
-
为什么不能更快?它调用
unlink()系统调用而不是启动一个完全不同的程序。 -
find对遍历目录进行了一些优化。特别是它查看链接计数以查看目录是否为空。我不知道rm是否不包含这些。你可以strace -c ...both 来统计系统调用并看看 -
您是在单个顶级目录上运行 rm 还是在更大的列表上运行(甚至更糟多次)?
-
您的“特别”命令 - 目录树中是否有任何文件或只有空目录?