Executando find… exec tar czvf somente arquiva um arquivo… precisa de todos os arquivos

1

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?

    
por Stryker CainII 15.08.2014 / 16:33

1 resposta

0

Seu comando está executando tar uma vez para cada arquivo, e cada chamada para tar cria uma saída com o mesmo nome, sobrescrevendo 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 grande. Se estiver, provavelmente você desejará alternar para usar tar rvf e fazer uma etapa gzip no final.

    
por 15.08.2014 / 19:19