find...exec tar czvf を実行すると 1 つのファイルのみがアーカイブされます...すべてのファイルが必要です

find...exec tar czvf を実行すると 1 つのファイルのみがアーカイブされます...すべてのファイルが必要です

実行しようとすると

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各ファイルに対して1回実行され、各呼び出しはtar同じ名前の出力を作成し、以前の出力を上書きします。そのため、最後のファイルのみが残ります。次のようなものが必要です。

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

ファイルのリストがそれほど大きくない限り、これは問題なく動作するはずです。リストが大きい場合は、 の使用に切り替えて、最後にtar rvf別の手順を実行することをお勧めします。gzip

関連情報