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:".

Jeannoburto
quelle

Antworten:

48

Sie können den Befehl ausgeben:

$ unzip '*.zip'

Schauen Sie hier als Referenz .

vfbsilva
quelle
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 {} \;
Kevin
quelle
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
slm
quelle
1

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

unzip -o somefiles.zip -d $directoryPath
Aditya Mittal
quelle
-dGibt das Verzeichnis an, in das extrahiert werden soll, nicht das Verzeichnis, in dem nach Dateien gesucht werden soll.
LegendaryDude