Wie extrahiere ich nur einen bestimmten Ordner aus einem ZIP-Archiv in ein bestimmtes Verzeichnis?

59

Wie extrahiert man einen bestimmten Ordner aus einem ZIP-Archiv in ein bestimmtes Verzeichnis?

Ich habe versucht mit

unzip "/path/to/archive.zip" "in/archive/folder/" -d "/path/to/unzip/to"

Dadurch wird jedoch nur der Ordner auf dem Pfad erstellt, in den entpackt werden soll, und nichts anderes wird ausgeführt.

Enkouyami
quelle

Antworten:

60
unzip <target-zip-file> '<folder-to-extract/*>' -d <destination-path> 

funktioniert gut auf EL 6

verklagen
quelle
3
Was ist das EL 6?
Zelda
2
Enterprise Linux 6 (RHEL6) - Red Hat.
slm
Das funktioniert auch; Es ist im Grunde die gleiche Antwort wie die von Mark Adler, aber auf eine etwas andere Art und Weise.
Enkouyami
@Enkouyami Abzüglich der Zitatunterschiede sieht es genauso aus.
Camilo Martin
1
@Enkouyami Da Backslash in doppelten Anführungszeichen einem Zeichen entgeht (angeblich wird das Sternchen maskiert, aber ich denke, es ist ein Tippfehler), wird der Backslash in einfachen Anführungszeichen nicht interpretiert. Wenn man einen wörtlichen Backslash haben "\\"möchte , würde man ihn verwenden (sonst müsste man sich immer merken, welche Zeichen Sonderzeichen sind). Es ist also ein Zitatunterschied, wenn der Autor das "Zitieren des Glob-Zeichens" meinte (unnötig). In jedem Fall ist ein solcher Backslash ein Tippfehler.
Camilo Martin
39

Versuchen:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to
Mark Adler
quelle
4
machte dies? Ich bekomme , caution: filename not matched: foldername/\*wenn ich laufe , unzip $repozip "$2-master/\*" -d /srv/www/magento/wo $2ist der Ordnername in der Zip ich alle Dateien und Ordner aus ziehen wollen
jeremy.bass
10
Arbeitete ohne \, nur "path/*".
Alex
8
Gibt es eine Möglichkeit, den Inhalt von "in / archive / folder / *" zu extrahieren, ohne den Pfad "in / archive / folder /" beizubehalten? Am Ende benutze ich mvdanach Dateien, wo ich sie brauchte.
Jerrygarciuh
6
Verwenden Sie -jdafür.
Mark Adler
4
-jEntfernt alle Pfadinformationen und alle Dateien werden in den Zielordner verschoben. Gibt es eine Möglichkeit, nur den gemeinsamen Teil des Pfades zu entfernen? Ähnlich wie beim Reißverschluss -r.
Bob Stein
6

Die vorhandenen zwei Antworten sind beide korrekt, aber es ist etwas schwierig, das Zielverzeichnis anzugeben, das besser geklärt werden sollte.

Nehmen wir an, es /target/root/ist das Zielverzeichnis bei der ursprünglichen Dekomprimierungsaktion, zB:

unzip -qq src.zip -d "/target/root/"

Anschließend müssen wir dasselbe /target/root/wie das Zielverzeichnis verwenden, obwohl wir nur ein bestimmtes Unterverzeichnis extrahieren möchten, wie das Entpacken funktioniert:

unzip -qq src.zip "sub/dir/*" "/target/root/"

Immerhin ist die Regel eigentlich einfach, verwenden Sie dasselbe Ziel-Stammverzeichnis für die -dOption .

Übrigens, die -qqOption ist, dass das Entpacken sehr leise ist. Sie können es jederzeit entfernen.

ryenus
quelle
Zu Ihrer Information: Ich habe <kbd> -qq 2.3.zip "magento2-2.3 / vendor / *" "vendor /" </ kbd> entpackt und <kbd> den folgenden Hinweis erhalten: Dateiname stimmt nicht überein: vendor / `</ kbd>. Dies ist auf einer Ubuntu-Installation in Bash. Ich habe selten entpackt, wahrscheinlich etwas anderes falsch gemacht ...
Chris K