![在包含大量文件和子目录的目录中查找命令非常慢](https://linux22.com/image/221031/%E5%9C%A8%E5%8C%85%E5%90%AB%E5%A4%A7%E9%87%8F%E6%96%87%E4%BB%B6%E5%92%8C%E5%AD%90%E7%9B%AE%E5%BD%95%E7%9A%84%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%91%BD%E4%BB%A4%E9%9D%9E%E5%B8%B8%E6%85%A2.png)
大约一周以来,我一直在等待以下命令完成
find -type d -empty -print -delete >> empty-folder-deletion-log.txt
但它仍在继续,似乎还有很多工作要做。我觉得我现在可能已经对整个硬盘驱动器进行了多次成像,所以我觉得该命令不是最佳的,或者有一种方法可以加快速度。
公平地说,有大量的文件和文件夹。一个硬盘驱动器大约有 1 亿个 inode,另一个硬盘驱动器大约有 1.75 亿个 inode。
我可以做什么来加快速度?我怀疑这个问题与随机 IO 有关,是否有一个等效的命令可以按照元数据存储在硬盘驱动器上的顺序来减少查找?我有哪些选项可以在不中断命令的情况下加快速度,或者有没有办法使用不同的程序重试?用 noatime 重新安装会有帮助吗?如果可以,我可以在不中断命令的情况下执行此操作吗?
我正在使用最新版本的 Debian stable,在撰写本文时它是 Debian bullseye。该命令在两个硬盘上运行:一个 8 TB 硬盘和一个 12 TB 硬盘,转速均为 5400 RPM。
答案1
我自己没用过-empty
,但这可能会很昂贵。另外,如果不-depth
进行深度优先搜索,您只能找到最底层的目录,而不会递归删除原本为空的目录树。
我建议使用strace -ttt -T -p <find_pid>
(和/或 ltrace)来查看是什么花了这么长时间。