On Sun, 11 Jun 2017 14:09, Joachim H. wrote:
Moin,
ich habe ein Verzeichnis, in dem mehrere Tausend zip-Dateien liegen. Diese möchte ich per Script entpacken. Das kriege ich noch hin. Allerdings sind die zip-Dateinamen etwas kryptisch und in den Archiven sind die Dateien ohne Ordner abgelegt. Mit der folgenden Aufgabe bin ich hoffnungslos überfordert.
Also die zip-Archive heißen in etwa so
dimdideldum%2Fx%2FArchivirgendwie.zip
dimdideldum%2Fx%2FArchivirgendwieanders.zip
Die Aufgabe wäre nun
1. Archive umbenennen, d.h. vorne alles inklusive des zweiten %2F wegschneiden
2. Ordner erstellen mit jetzt gekürztem Namen (ohne .zip natürlich)
3. zip-Archive in jeweils passenden Ordner kopieren und extrahieren.
hätte da jemand ein Code-Schnipsel? Wäre super!
Mal, sehen, also erster Tipp: "man bash" suche nach "parameter#word" Im detail: [code] #!/usr/bin/bash # Name einer bekannten (benamten) Variable zuweisen # zuerst leeren. Nummer sicher ist nummer sicher! Ganzer_Zip_Name="" # bei einelner Datei: Ganzer_Zip_Name="dimdideldum%2Fx%2FArchivirgendwie.zip" # bei Verwendung in script / function als parameter test "$1" != "" && Ganzer_Zip_Name="$1" # Gibt die Datei ? test -s "$Ganzer_Zip_Name" || exit 1 # blah_fasel_%2Fx%2F weg ${param##word} Nur_Kurz_Name=${Ganzer_Zip_Name##*%2Fx%2F} # Endung weg ${param%word} Kurz_Ohne_Endung=${Nur_Kurz_Name%.zip} # Zielordner erstellen mkdir "$Kurz_Ohne_Endung" # zip in Zielordner auspacken (-d Zielordner) /usr/bin/unzip "$Ganzer_Zip_Name" -d "$Kurz_Ohne_Endung" # zip umbenennen + verschieben mv "$Ganzer_Zip_Name" "$Kurz_Ohne_Endung/$Nur_Kurz_Name" #EOF [/code] Q: nun kommt die Frage "...und wie anwenden?" A: am besten in einer Schleife als shell-script. 1. den code in eine Datei schreiben. 2. Die Datei im normalen $PATH speichern, vorzugsweise unter $USER/bin/ oder /usr/local/bin/ 3. executable-bit setzen (chmod a+x [Pfad/Datei]) 4. Aufrufen: (Datei hier Zip_Aufraeumen.sh genannt) 4.a) kleine Mengen via "for var in values; do cmd ; done": [code for use in shell] cd "Stammverzeichniss" for z in *.zip ; do Zip_Aufraeumen.sh $z ; done [/code] 4.b) große Massen via xargs. (man xargs, -P für gleichzeitige Prozesse) "ls |grep" um nur zip dateien zu bearbeiten [code for use in shell] cd "Stammverzeichniss" /usr/bin/ls -f1|/usr/bin/grep '\.zip$'|/usr/bin/xargs -r -L 1 -P 3 Zip_Aufraeumen.sh [/code] Hilft das auf die Sprünge? HtH, und schönen Sonntag noch, - Yamaban.