Extrahieren Sie mehrere Zip-Dateien, jede in einem neuen Ordner mit demselben Namen, über das Ubuntu-Terminal

36

Ich habe viele zip-Dateien a.zip, b.zip, c.zip, ... und ich möchte sie jeweils über das Terminal in neue Ordner a, b, c, ... extrahieren .

Eigentlich möchte ich eine Lösung, die ich später mit a verwenden kann, findda ich tatsächlich viele Ordner 2014, 2013, 2012, ... habe, die jeweils viele ZIP-Dateien a.zip, b.zip usw. enthalten find . -name "*.zip" -exec {} unzip \;Es werden alle Dateien entpackt und in den jeweiligen übergeordneten Ordner abgelegt.

Michael
quelle
Verwandte Themen
entpacken

Antworten:

70

Sie sollten in der Lage sein, mit der -dOption unzip ein alternatives Verzeichnis für den Archivinhalt festzulegen .

unzip -d a a.zip
unzip -d b b.zip

und so weiter. Innerhalb eines findAusdrucks sollten Sie in der Lage sein, den Namen des Verzeichnisses aus dem Namen der Zip-Datei mit Hilfe der Shell-Parameter-Erweiterung abzuleiten, z

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

Testen Sie es zuerst, indem Sie ein echoie hinzufügen

find -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;

oder so ähnlich

while read -rd $'\0' f; do 
  unzip -d "${f%.*}" "$f"
done < <(find -name '*.zip' -print0)
Stahlfahrer
quelle
1
+1 für den test it first…Teil
Mrzmyr
2
findbraucht ein verzeichnis, alsofind . -name ...
slf 31.12.18
@slf POSIXly, yes - aber nicht bei GNU find( "Wenn kein Startpunkt angegeben ist, .wird davon ausgegangen." )
steeldriver 31.12.18
10

Ich habe selbst danach gesucht, nur um festzustellen, dass ich es bereits mit anderen Befehlen getan hatte und es auf so ziemlich alles andere angewendet werden konnte, wie ich es bereits getan hatte.

Die Suchmethode ist verrückt und ohne Grund überkompliziert.

for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done
Kencinder
quelle
Dies ist zweifellos die beste Antwort auf die jeweilige Frage. Das vorherige ist lächerlich und das nachfolgende sortiert nicht in die Dateien bzw. Stammordner.
TheMegolith
Wie würde man vorgehen, um das Verzeichnis ohne das .zipSuffix zu erstellen ? Nach einem Freund fragen.
Dashard
Bei der Antwort wird kein Verzeichnis mit dem Suffix .zip erstellt, das ist der eigentliche Punkt des Abschnitts innerhalb der geschweiften Klammern.
Kencinder
6

Einfach benutzen

unzip '*.zip' -d /home/user/folder/
James Muller
quelle
10
Sofern ich nichts vermisse, wird alles in / home / user / folder entpackt, nicht in / home / user / folder / a und / home / user /
M. Justin
0

Ich musste das auch mit unrar machen. Dies kann durch eine geringfügige Änderung des Codes von Kencinder erreicht werden.

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

PS: Ich wollte dies als Kommentar hinzufügen, aber ich habe nicht genug Reputationspunkte!

Atul Singh Arora
quelle