我尝试编写一个脚本来搜索特定路径以查找早于给定时间的文件。由于参数列表长度,我不直接这样做,而是将找到的文件写入列表。在第二步中,我获取此列表并 tar 那些文件,计划是稍后读取 tar 列表并删除归档在源目录中的文件。
查找特定文件并写入列表:
解决方案:添加 -type f
find /path/to/*/xfiles/* -type f -mtime +8 -print > /tmp/archiv-xfiles.manifest
据我所知,这是正确的。每次运行的文件列表都不同,而这将是使用 mtime 的效果,我猜这是相对工作的。现在我获取列表并 tar 列出列出的文件:
tar -czvPf /tmp/archiv-xfiles.tar.gz --files-from /tmp/archiv-xfiles.manifest
在这一点上,我被一个包含每个文件三次的存档卡住了?打印的清单列表是正确的,每个文件只出现一次。我可恶吗?
虽然我会这样说:
tar -tvf /tmp/archiv-xfiles.tar.gz > /tmp/archiv-xfiles-to-delete.manifest
我是否也需要在这里进行错误检查以确保存档未损坏?
diff /tmp/archiv-xfiles.manifest /tmp/archiv-xfiles-to-delete.manifest > /dev/null
v1=$?
if [ $v1 == 0 ] ; then
现在我看到了两种方法,第一种。哪个更快?:
cat /tmp/archiv-xfiles-to-delete.manifest | xargs rm -rf
或第二个:
while read line
do
rm -f $line
done < /tmp/archiv-xfiles-to-delete.manifest
不知道哪个更好?猜猜使用tar --remove-files
switch 不好还是省心?
其余的:
rm -f /tmp/archiv-xfiles.manifest
rm -f /tmp/archiv-xfiles-to-delete.manifest
elif
echo ERROR, check manifest files! | mail -s ScriptError someone@somewhere.com
fi
也许有人可以告诉我对列表进行 tar 处理有什么问题,而对整个脚本的任何想法都非常感谢。例如,tar 选项“--remove-files”是一种保存且可靠的方式,可以实现与我列出 tar 内容、差异和删除的方式相同的效果吗?