优化创建存档的时间

优化创建存档的时间

目前,我正在使用以下命令创建包含超过 7 天的文件的存档:

find /var/tunningLog/ -type f -mtime +7 -print0 | tar -czf "/var/tunningLog/$(date '+%Y-%m-%d').tar.gz" --null -T - && echo "OK" || echo "NOK"

但需要很长时间(目前/var/tunningLog/有49G)。有什么方法可以加快进程或改进命令吗?谢谢

答案1

/var/TuningLog由于您正在创建in的存档/var/TuningLog,因此您创建的存档包含一周前或更早创建的存档。您的档案档案不断增长。

如果不排除想要的文件,请修改您的find以排除您的档案 ( )。\! -name '*.tar.gz'

或者

将您的档案保存在其他地方。

答案2

使用find | tar管道是 UNIX 时代的产物,当时重用代码的唯一方法是通过管道组合命令。

stat(2)这很慢,因为它需要为每个文件运行两次。

  • 一旦从命令中find(1)识别出感兴趣的文件

  • 另一次来自内部,tar(1)因为 tar 需要元数据进行归档

自 33 年以来,出现了另一种通过使用共享库来组合可重用代码的方法,自 16 年以来,出现了libfind一种以允许重用功能的方式包含 find 命令的所有功能的方法。

由于您使用的是非标准tar选项-T,例如 ,似乎您正在使用gtar而不是targtar 因其创建 tar 标头的无效代码而闻名。

我建议您查看star,这是最古老的免费tar实现,它包含libfind自 2005 年以来的支持,并且包含对允许在命令行右侧-find使用语法的选项的支持。find(1)-find

例如,检查 schilytools 网页上的手册页:http://schilytools.sourceforge.net/man/man1/star.1.html

这会导致类似于以下的命令行:

star -c -f /tmp/xxx.tar -find . -type f -mtime +7

相关内容