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.