Mehrere Archive auf einmal entpacken
Gestern war ich mit diesem Problem konfrontiert: Mehr als ein Dutzend Archive musste ich entpacken, allerdings wollte ich nicht alle einzeln entpacken. Zum Glück hilft ein Einzeiler für die Bash, um das Problem elegant zu lösen.
Der Ausgangspunkt
Der Quellcode zu einem Video-Tutorial kam zu mir als Archiv, welches wiederum 18 weitere Archive enthielt. Die Liste der 18 Archive zeigt der folgende Code-Ausschnitt. Hinzu kommt noch, dass jedes Archiv keine Ordnerstruktur besitzt. Benutze ich im Kontextmenü von Nautilus den Eintrag Hier entpacken
, überschreibt mir das zweite Archiv die Dateien aus dem ersten Archiv.
michael@Z30t:~/Downloads/Web Development with AngularJS and Bootstrap$ lh
insgesamt 148K
-rw-r--r-- 1 michael michael 1,3K Okt 28 2014 Code Bundle 2.1.zip
-rw-r--r-- 1 michael michael 1,7K Okt 28 2014 Code Bundle 2.2.zip
-rw-r--r-- 1 michael michael 2,5K Okt 28 2014 Code Bundle 2.3.zip
-rw-r--r-- 1 michael michael 11K Okt 29 2014 Code Bundle 2.4.zip
-rw-r--r-- 1 michael michael 2,7K Nov 3 2014 Code Bundle 3.1.zip
-rw-r--r-- 1 michael michael 2,8K Nov 3 2014 Code Bundle 3.2.zip
-rw-r--r-- 1 michael michael 3,8K Nov 3 2014 Code Bundle 3.3.zip
-rw-r--r-- 1 michael michael 3,8K Nov 3 2014 Code Bundle 3.4.zip
-rw-r--r-- 1 michael michael 4,5K Nov 8 2014 Code Bundle 4.1.zip
-rw-r--r-- 1 michael michael 5,5K Nov 8 2014 Code Bundle 4.2.zip
-rw-r--r-- 1 michael michael 5,7K Nov 8 2014 Code Bundle 4.3.zip
-rw-r--r-- 1 michael michael 8,4K Nov 8 2014 Code Bundle 4.4.zip
-rw-r--r-- 1 michael michael 6,8K Nov 17 2014 Code Bundle 5.1.zip
-rw-r--r-- 1 michael michael 9,1K Nov 17 2014 Code Bundle 5.2.zip
-rw-r--r-- 1 michael michael 11K Nov 17 2014 Code Bundle 5.3.zip
-rw-r--r-- 1 michael michael 12K Nov 24 2014 Code Bundle 6.1.zip
-rw-r--r-- 1 michael michael 12K Nov 24 2014 Code Bundle 6.2.zip
-rw-r--r-- 1 michael michael 13K Nov 24 2014 Code Bundle Complete.zip
Die Lösung
Eine einfache for-Schleife erledigt das Entpacken aller Archive für uns. Dabei gibt es jedoch ein paar Dinge zu beachten:
- Die Dateinamen enthalten Leerzeichen, weshalb
$file
in Anführungszeichen stehen muss. - Mit dem Parameter
-d
kann manunzip
ein Zielverzeichnis übergeben. - Durch
$()
führen wir einen Befehl aus und können das Ergebnis als Zeichenfolge verwenden. Da diese Zeichenfolge Leerzeichen enthält sind umschließende Anführungszeichen erforderlich. basename
gibt den Dateinamen ohne vollständigen Pfad aus. Mit Hilfe des zweiten Arguments kann man außerdem die Dateiendung entfernen. In diesem Fall spielt nur letztere Funktion eine Rolle.
Der Code in formatierter Darstellung
for file in "*.zip"
do
unzip "$file" -d "$(basename "$file" .zip)"
rm "$file"
done
Der Code als Einzeiler
for file in "*.zip"; do unzip "$file" -d "$(basename "$file" .zip)"; rm "$file"; done
Das Ergebnis
Wie gewünscht erhalten wir einen Ordner pro Archiv. Die Archive wurden erfolgreich mit rm
gelöscht.
michael@Z30t:~/Downloads/Web Development with AngularJS and Bootstrap$ lh
insgesamt 72K
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 2.1
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 2.2
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 2.3
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 2.4
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 3.1
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 3.2
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 3.3
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 3.4
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 4.1
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 4.2
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 4.3
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 4.4
drwxr-xr-x 4 michael michael 4,0K Dez 29 17:15 Code Bundle 5.1
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 5.2
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 5.3
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 6.1
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle 6.2
drwxr-xr-x 2 michael michael 4,0K Dez 29 17:15 Code Bundle Complete