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 tar
uma vez para cada arquivo e cada chamada tar
cria 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 rvf
e executar uma gzip
etapa separada no final.