Der Linux-Unzip-Befehl extrahiert nur Dateien aus Verzeichnissen, deren Namen eine bestimmte Zeichenfolge enthalten

Der Linux-Unzip-Befehl extrahiert nur Dateien aus Verzeichnissen, deren Namen eine bestimmte Zeichenfolge enthalten

Ich habe ein Zip-Archiv, das eine Verzeichnishierarchie von Dateien enthält. Ich möchte den Linux-Befehl „unzip“ verwenden, um nur die Teilmenge dieser Dateien zu extrahieren, die irgendwo im Verzeichnispfad, der zur Datei führt, eine bestimmte Zeichenfolge aufweisen.

Angenommen, die Datei foo.zip enthält diese Dateien:

a/1.txt
acme/2.txt
a/acme/b/3.txt
a/b/acmenet/c/4.txt
a/b/c/5.txt
a/acme/d/6.php

Der Linux-Befehl „unzip foo.zip *.txt“ extrahiert alle 5 „txt“-Dateien.

Wie kann dieser Linux-Befehl so geändert werden, dass er nur die 3 „txt“-Dateien extrahiert, die irgendwo im Verzeichnispfad die Zeichenfolge „acme“ enthalten (er würde also nur 2.txt, 3.txt und 4.txt extrahieren)?

Antwort1

Ihr Beispiel unzip foo.zip *.txthat nur funktioniert, weil sich *.txtin Ihrem Arbeitsverzeichnis keine Datei befand. Andernfalls *.txt wäre es von der Shell in die Namen der Textdateien in Ihrem Verzeichnis erweitert worden. Sie müssen es sicherheitshalber in Anführungszeichen setzen.

Da unzipGlobs verwendet werden, verwenden Sie

unzip foo.zip '*acme*/*.txt'

oder auch

unzip foo.zip '*acme*.txt'

Wenn Sie die ursprüngliche Verzeichnisstruktur nicht wiederherstellen und die Dateien nicht in das aktuelle Arbeitsverzeichnis extrahieren möchten, fügen Sie die folgende Option hinzu -j:

unzip -j foo.zip '*acme*/*.txt'

verwandte Informationen