目前,我正在使用以下命令创建包含超过 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
而不是tar
gtar 因其创建 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