0

我尝试编写一个脚本来搜索特定路径以查找早于给定时间的文件。由于参数列表长度,我不直接这样做,而是将找到的文件写入列表。在第二步中,我获取此列表并 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-filesswitch 不好还是省心?
其余的:

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 内容、差异和删除的方式相同的效果吗?

4

1 回答 1

1

1)至于 tarring 列表:您可能会获得额外的代码,因为您的列表既有文件也包含 dirs。尝试在查找咒语中添加“-type f”以仅获取文件。

2)关于参数列表长度,使用 xargs 的要点之一就是它会照顾它;你可以做

find ..... -print0 | xargs rm

3) 我真的不明白您为什么要生成一个列表,将文件 tar 并从 tar 存档中重新生成相同的列表。

于 2013-07-21T02:10:49.510 回答