Executando find...exec tar czvf arquiva apenas um arquivo...precisa de todos os arquivos

Executando find...exec tar czvf arquiva apenas um arquivo...precisa de todos os arquivos

Ao tentar executar

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

Eu recebo a lista de arquivos

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

Mas o arquivo só recebe o último item

 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

O que estou fazendo de errado?

Responder1

Seu comando é executado taruma vez para cada arquivo e cada chamada tarcria uma saída com o mesmo nome, substituindo assim a saída anterior. Então você acaba com apenas o último arquivo. Você precisa de algo como

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

Isso deve funcionar bem, desde que sua lista de arquivos não seja enorme. Se for, provavelmente você desejará passar a usar tar rvfe executar uma gzipetapa separada no final.

informação relacionada