Unterhaltsame Tatsache: Wenn Sie Archive Manager verwenden und eine .tar.gz-Datei extrahieren, sodass die Option "Verzeichnisstruktur beibehalten" deaktiviert ist, erhalten Sie eine Tarbomb .
tar -ztf
listet alle Dateien und Verzeichnisse in einer tar-Datei auf. Gibt es eine Möglichkeit, alle Dateien in einer TAR-Datei ohne die Verzeichnisstruktur aufzulisten?
tar xvzf my_tar.tar.gz --transform 's/.*\///'
. Aber leider ändert das nichts daran, wie es in einer Auflistung mitt
anstatt angezeigt wirdx
.Antworten:
Ich sehe in der Manpage keine Möglichkeit, dies zu tun, aber Sie können die Ergebnisse immer filtern. Im Folgenden wird davon ausgegangen, dass Ihre Dateinamen keine Zeilenumbrüche enthalten:
Wie es funktioniert
Wenn Sie das Feldtrennzeichen auf setzen
/
, ist das letzte Feld,awk
das über ($NF
) informiert ist, entweder der Dateiname, wenn ein Dateiname verarbeitet wird, oder leer, wenn ein Verzeichnisname verarbeitet wird (tar
fügt den Verzeichnisnamen einen abschließenden Schrägstrich hinzu). Wir empfehlen alsoawk
, das letzte Feld auszudrucken, wenn es nicht leer ist.quelle
Joseph R. Vorschlag einer Verwendung kann die Regex verwenden ,
[^/]$
umgrep
für die Dateien , die von der Suche nach Zeilen mit nicht enden/
.tar tzf archive.tar.gz | grep -e "[^/]$"
quelle
foo/bar
im Gegensatz zu nurbar
. Du willstgrep -Eo '[^/]+$'
(mit GNU grep).Angenommen, keiner der Dateinamen enthält Zeilenumbrüche:
Der erste sed-Befehl entfernt alles vor dem letzten
/
in einer Zeile, sodass nur der Dateinamensabschnitt gedruckt wird. Der zweite Befehl löscht die jetzt leeren Zeilen, dh die Zeilen, die mit a geendet/
haben und Verzeichnisse sind.quelle
Mit
pax
(dem POSIX-Befehl zum Lesen vontar
Dateien):(Hier werden alle Dateien unabhängig von ihrem Typ aufgelistet, einschließlich der Verzeichnisse).
quelle