当尝试运行时
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 rvf
并gzip
在最后执行单独的步骤。