Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
(Zip) Archive rekursiv entpacken relativ von Hauptordner zu Zielordner
Ist soweit klar, findet ausgehend vom weiter oben festgelegten Pfad alle Archivdateien und piped sie zu gsed.
Code:
gsed -r "s#$Archive(\/.*\/).*#\1#"
gsed entfernt von allem, was kommt, vorn den Pfad zu den Archivdateien und hinten den Dateinamen. Die "Pfadrudimente" werden zu awk gepiped.
Code:
awk -v "Archive=$Archive" -v "Daten=$Daten"
Hier werden Bash-Variablen zu awk-Variablen. Muss nicht sein, erleichtert aber das Quoting ungemein.
Code:
{!a[$0]++}
Klassiker, awk liest die von gsed kommenden Pfade und packt sie in ein Array, wenn sie nicht schon drin sind.
Code:
END {for (i in a) {cmd=sprintf("for f in \"%s%s*.zip\"; do mkdir -p \"%s%s\" && unzip \"$f\" -d \"%s%s\"; done\n",Archive, i, Daten, i, Daten, i); system(cmd)}}
Wenn von gsed nichs mehr kommt, bastelt awk mit der Funktion sprintf() eine Kommandozeile in der Variablen cmd zusammen, die an die Prozedur system() übergeben werden kann. Das ist notwendig, weil man innerhalb des system-Parameters nur ganz eingeschränkte Quoting-Möglichkeiten hat.
Code:
"for f in \"%s%s*.zip\"
Diese Bash-for-Schleife ist notwendig, weil Bash das "*.zip" sofort erweitert und alle in diesem Pfad gefundenen Archive auf einmal an unzip übergibt, was sich daraufhin mit einer Fehlermeldung verabschiedet.
Code:
mkdir -p \"%s%s\"
unzip meckert manchmal rum, wenn der Zielpfad nicht existiert. Manchmal auch nicht. Es schadet jedenfalls nicht.
Code:
unzip \"$f\"
unzip bekommt seinen Quellpfad aus der for-Schleife als Bash-Variable.
Code:
-d \"%s%s\"
unzip bekommt seinen Zielpfad, der sich aus dem anfangs definierten "Daten=" und dem von gsed extrahierten "Restpfad" zusammensetzt.
Dann noch das Ganze mit system() an Bash übergeben- thats all.