Wie man in recursiv in Unterverzeichnissen entpacken kann

Gehen wir davon aus wir haben einen Ordner mit folgender Ordnerstruktur:

../garten/garten.zip/garten1.jpg, garten2.jpg
../haus/wohnzimmer/fenster.zip/fenster/fenster1.jpg, fenster2.jpg, fenster 3.jpg
../haus/wohnzimmer/balkon.zip/balkon1.jpg, balkon2.jpg, balkon2.jpg

Der folgende befehl entpackt die jeweiligen zip archive in den Ordner in dem sie drin liegen. Beachte fenster, diese zip beinhaltet bereits einen Ordner!

find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

Ergebnis:

../garten/garten1.jpg, garten2.jpg
../garten/garten.zip/garten1.jpg, garten2.jpg
../haus/wohnzimmer/fenster/fenster1.jpg, fenster2.jpg, fenster 3.jpg
../haus/wohnzimmer/fenster.zip/fenster/fenster1.jpg, fenster2.jpg, fenster 3.jpg
../haus/wohnzimmer/balkon1.jpg, balkon2.jpg, balkon2.jpg
../haus/wohnzimmer/balkon.zip/balkon1.jpg, balkon2.jpg, balkon2.jpg

wenn alles sauber geklappt hat kann man hiermit die zips löschen:

find . -name "*.zip" -exec rm {} \;

Ich brauchte das gerade für nen ganzen Haufen voller Zips die allerdings alle einen Ordner mit dem gleichen Namen der jeweiligen zip selbst beinhaltet haben deswegen war das genau das was ich brauchte. Wenn man aber in einem Ordner mehrere zips hat die keinen solchen Ordner beinhalten würde der Befehl den Inhalt verschiedener Zips in einen Ordner entpacken sollte das nicht gewollt sein muss man wohl ein wenig Logik anwenden und den 1. Befehl abändern.

Speak Your Mind

*