运行 find...exec tar czvf 仅存档一个文件...需要所有文件

运行 find...exec tar czvf 仅存档一个文件...需要所有文件

当尝试运行时

find . -iname "*.gz" -mtime +7 -exec tar czvf all_gizip_$(date +%Y-%m-%d).tar.gz {} \;

我得到了文件列表

./corosync.log-20140620.gz
./corosync.log-20140618.gz
./rgmanager.log-20140620.gz
./fenced.log-20140620.gz
./rgmanager.log-20140618.gz
./qdiskd.log-20140618.gz

但档案馆只得到最后一项

 tar -tvf all_gizip_$(date +%Y-%m-%d).tar.gz
-rw-r--r-- root/root       506 2014-06-18 03:21 ./qdiskd.log-20140618.gz

我究竟做错了什么?

答案1

您的命令针对每个文件运行tar一次,并且每次调用都会tar创建一个同名的输出,从而覆盖前一个输出。因此,您最终只得到最后一个文件。您需要类似

find . -iname "*.gz" -mtime +7 | xargs tar czvf all_gizip_$(date +%Y-%m-%d).tar.gz

只要您的文件列表不是很大,这应该可以正常工作。如果很大,那么您可能希望切换到使用tar rvfgzip在最后执行单独的步骤。

相关内容