Lancer find… exec tar czvf n'archive qu'un fichier… besoin de tous les fichiers

1

En essayant de courir

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

Je reçois la liste des fichiers

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

Mais l'archive n'obtient que le dernier élément

 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

Qu'est-ce que je fais mal?

Stryker CainII
la source
Il semble que la recherche se limite aux 7 derniers jours. Les fichiers répondent-ils à ces critères?
Tyson
Oui Tyson. La rotation du journal crée le fichier .gz pour commencer. J'ai besoin de lancer le second dans cron pour prendre tous les gz et les mettre dans un seul gz, puis les déplacer pour archiver. jjlin m'a donné la correction à mon original.
Stryker CainII

Réponses:

0

Votre commande est exécutée tarune fois pour chaque fichier et chaque appel à tarcréer une sortie du même nom, écrasant ainsi la sortie précédente. Donc, vous vous retrouvez avec seulement le dernier fichier. Vous avez besoin de quelque chose comme

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

Cela devrait fonctionner correctement tant que votre liste de fichiers n'est pas énorme. Si c'est le cas, vous voudrez probablement utiliser tar rvfet effectuer une gzipétape distincte à la fin.

jjlin
la source