Find ... ausführt tar czvf archiviert nur eine Datei ... benötigt alle Dateien

936
Stryker CainII

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 den letzten Artikel

 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?

1
Es sieht so aus, als ob der Fund auf die letzten 7 Tage beschränkt ist. Erfüllen die Dateien diese Kriterien? Tyson vor 9 Jahren 0
Ja, Tyson. Protokoll drehen erstellt die .gz, um mit zu beginnen. Ich muss den zweiten in cron ausführen, um alle GZs in einen einzigen GZ zu packen und sie dann zum Archivieren abzulegen. jjlin gab mir die korrektur zu meinem original. Stryker CainII vor 9 Jahren 0

1 Antwort auf die Frage

0
jjlin

Ihr Befehl wird tareinmal für jede Datei ausgeführt. Bei jedem Aufruf tarwird eine Ausgabe mit demselben Namen erstellt, wodurch die vorherige Ausgabe überschrieben wird. Sie erhalten also nur die letzte Datei. Du brauchst so etwas

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

Dies sollte funktionieren, solange Ihre Liste der Dateien nicht groß ist. Wenn dies der Fall ist, möchten Sie wahrscheinlich am Ende auf tar rvfeinen separaten gzipSchritt umschalten .