Das Ausführen von find...exec tar czvf archiviert nur eine Datei...benötigt alle Dateien

Das Ausführen von find...exec tar czvf archiviert nur eine Datei...benötigt alle Dateien

Beim Versuch zu laufen

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

Ich bekomme die Liste der Dateien

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

Das Archiv erhält jedoch nur das letzte Element

 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

Was mache ich falsch?

Antwort1

Ihr Befehl wird tareinmal für jede Datei ausgeführt und jeder Aufruf von tarerzeugt eine Ausgabe mit demselben Namen und überschreibt somit die vorherige Ausgabe. Sie erhalten also nur die letzte Datei. Sie benötigen etwas wie

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

Dies sollte problemlos funktionieren, solange Ihre Dateiliste nicht sehr groß ist. Wenn dies der Fall ist, sollten Sie wahrscheinlich auf die Verwendung umsteigen und am Ende tar rvfeinen separaten Schritt ausführen .gzip

verwandte Informationen