Einen Stapel von Dateien entpacken


33

Wenn ich es versuche

 unzip filename.zip

Es klappt. Ich muss jedoch eine Reihe von ZIP-Dateien entpacken.

Warum sind:

 find . -name "*.zip" -print0 | xargs -0 unzip

oder

 ls *.zip | xargs unzip

funktioniert nicht?

In beiden Fällen erhalte ich die Meldung "Achtung: Dateiname stimmt nicht überein:".

Antworten:


48

Sie können den Befehl ausgeben:

$ unzip '*.zip'

Schauen Sie hier als Referenz .


Ich habe es nicht klar gesagt, aber sie befinden sich nicht alle im selben Verzeichnis. Also brauche ich die Ausgabe von find.
Jeannoburto

4
Vielen Dank. Dies könnte nicht perfekt mit der eigentlichen Frage übereinstimmen, aber dies löste mein Problem. Ich habe es versucht unzip *und es kehrte caution: filename not matchedfür jede Datei zurück, hat unzip '*.zip'aber den Job gemacht.
Ivan

27

Ihre Befehle funktionieren nicht, weil sie alle Dateien in dieselbe Befehlszeile schreiben. Während dies mit den meisten Programmen funktioniert, unzipwird das erste Argument als Zip-Datei und jedes nach dem ersten als zu extrahierende Datei verwendet. Sie müssen den Befehl einmal für jede Datei ausführen:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

Oder

find . -name '*.zip' -exec unzip {} \;

Die zweite scheint besser zu sein, falls es wirklich viele Dateien gibt. (Andernfalls wird beanstandet, dass der Befehl mit xargs zu lang ist.)
Aufzeichnung

5

In bash können Sie auch Folgendes tun:

for i in *.zip; do
    unzip "$i"
done

Ebenfalls unzipKann den -dSchalter nehmen , also kannst du die Ausgabe zu den verschiedenen Positionen zielen.

Beispielsweise:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

1

Es gibt eine viel einfachere Lösung als die oben angegebenen Schleifen. Verwenden Sie das Verzeichnis- -dFlag:

unzip -o somefiles.zip -d $directoryPath

-dGibt das Verzeichnis an, in das extrahiert werden soll, nicht das Verzeichnis, in dem nach Dateien gesucht werden soll.
LegendaryDude
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.