我有一个包含超过 1300 万个文件的目录,我想根据 mtime 删除其中一些文件,如何有效地做到这一点?它位于 ext4 上。
答案1
你可能不会得到比以下更有效的方法:
find /dir -type f -mtime +6 -delete
删除超过 7 天(是的,是 7,不是 6)天的文件。
在任何情况下,您都需要lstat()
对每个文件执行一次系统调用以确定其最后修改时间。删除文件(unlink()
从目录中删除文件)的成本很高,因为它需要编辑目录的内容、更新目录的修改时间、更新文件在 inode 中的链接计数以及更新块/盘区分配信息。
使用-delete
(GNU 扩展)非常高效,因为可以直接unlink()
完成find
,而无需调用单独的rm
实用程序。它意味着-depth
,但我不认为这会对性能产生太大影响。