按日期删除数十万个文件

按日期删除数十万个文件

我想要一个可以检查不同目录中文件的期限并删除超过过期期限的脚本。可能有数十万个具有不同创建日期的文件。有些目录没有那么多文件。大约有 100 个目录。这些目录有不同的有效期。我考虑使用 YAML 进行配置,使用 Perl 5 或 Python 3 作为脚本语言。哪一个可以更快地完成工作?这可以在几个小时 (3-5) 内完成还是需要几天时间?

该脚本将在 Linux 上运行。

答案1

这些目录有不同的有效期。

所以你需要一个循环和最大值。 100 次调用find

find ... -delete我认为如果您使用该方法(或直接使用其他方法),这将只需要几秒钟。如何这被称为是次要的。

配置文件可能可以简化为 2 列文件。

一种优化方法是将具有相同 exp 的目录分组。一起约会,例如:

find dir1 dir2 dir3 -type f -mtime  +7 -delete

(根据上次修改时间删除至少 8 天的常规文件)。

find dir4 dir5 dir6 -type f -mtime +30 -delete

(根据上次修改时间删除至少 31 天的常规文件)。


所以你甚至不需要 Perl,但是为了舒适的 YAML 解析和一些列表排序,当然可以。


想一想:您可以直接使用“find-ML”:

find dir1 dir2 dir3\
 d7 d13\
 d42 d44 d46\
 -type f -mtime  +7 -delete


find dir4 dir5 dir6\
 d11 d19\
 d61 d62 d63\
 -type f -mtime  +30 -delete


find ...\
 ...\
 -type f -mtime  +XY -delete

你可以说混合数据和代码是丑陋的 - 但在你的情况下它是 95% 的数据。该代码仅用于根据天数对目录进行分组,就像 YAML 文件所做的那样。目录的过期日期分配可能有一些规则?或者无论如何都必须手工完成:为什么不那么直接呢? (这需要一些时间来设置,也许还需要维护)

相关内容