Es scheint, ich habe ein Problem. Ich habe einige verschiedene Dateitypen in meinem aktuellen Verzeichnis und ich möchte nurTeerDie.pngDateien. Ich habe damit angefangen:
find -name "*.png" | tar -cvf backupp.tar
Es funktionierte nicht, da ich die Dateien nicht angegeben hatte. Ich schaute mir also an, wie andere es gemacht haben, und fügte xargs hinzu:
find -name "*.png" | xargs tar -cvf backupp.tar
Diesmal hat es geklappt und die Datei „backupp.tar“ wurde erstellt, aber hier ist das Problem. Ich kann sie scheinbar nicht extrahieren. Immer wenn ich Folgendes eingebe:
tar -xvf backupp.tar
Es passiert nichts. Ich habe versucht, chmod und sudo zu ändern, aber nichts funktioniert.
Habe ich also den völlig falschen Befehl eingegeben oder habe ich einfach etwas übersehen?
Antwort1
Jeder Ihrer beiden Ansätze war nahezu funktionsfähig, hatte jedoch jeweils ein eigenes Problem.
In Ihrem ersten Ansatz versuchen Sie, eine Liste von Dateien an weiterzuleiten tar
. Wenn Sie tar
die Liste der Dateien von der Standardeingabe lesen möchten, müssen Sie die Optionen -T
/ --files-from
und verwenden, z. B.-
find -name '*.png' -print0 | tar -cvf backup.tar --null -T -
Eine Referenz finden Sie in der offiziellen Dokumentation:
NOTIZ:Die Verwendung der Flags -print0
und --null
sollte sicherstellen, dass auch Dateinamen verarbeitet werden, die Leerzeichen enthalten.
tar
Bei Ihrem zweiten Ansatz versuchen Sie, via auszuführen xargs
, verwenden aber die Option „create“ ( --create
/ -c
). Wenn Sie die Option „create“ mit xargs
oder in einer for-Schleife verwenden, wird das Archiv nach jeder Iteration überschrieben. Versuchen Sie stattdessen, entweder die Option „append“ ( -a
/ --append
) oder die Option „update“ ( -u
/ --update
) zu verwenden, z. B.:
find -name "*.png" -exec tar -uvf backupp.tar {} \;
Dadurch werden nach jeder Iteration Dateien an das Archiv angehängt, anstatt es zu überschreiben.
Wenn Sie fertig sind, können Sie in jedem Fall die Option „Liste“ ( --list
/ -t
) verwenden, um den Inhalt des Archivs anzuzeigen und zu überprüfen, ob alles wie erwartet funktioniert hat:
tar tf backupp.tar
Antwort2
Sie können einfach den Platzhalter
tar -cvf backup.tar *.png
oder durch Verwendungfind
find -name "*.png" | tar -cvf backup.tar -T -
Die -T
Option ruft den Dateinamen aus DATEI ab, in diesem Fall stdin-