Wenn Sie zipinfo
nicht haben und nicht installieren können Sie können es aus irgendeinem Grund nachahmen, indem Sie unzip
verwenden mit -Z
Möglichkeit. Um den Inhalt der ZIP-Datei aufzulisten, verwenden Sie unzip -Z1
:
pw="$(unzip -Z1 file1.zip | cut -f1 -d'.')"
unzip -P "$pw" file1.zip
Setzen Sie es in eine Schleife:
zipfile="file1.zip"
while unzip -Z1 "$zipfile" | head -n1 | grep "\.zip$"; do
next_zipfile="$(unzip -Z1 "$zipfile" | head -n1)"
unzip -P "${next_zipfile%.*}" "$zipfile"
zipfile="$next_zipfile"
done
oder eine rekursive Funktion:
unzip_all() {
zipfile="$1"
next_zipfile="$(unzip -Z1 "$zipfile" | head -n1)"
if echo "$next_zipfile" | grep "\.zip$"; then
unzip -P "${next_zipfile%%.*}" "$zipfile"
unzip_all "$next_zipfile"
fi
}
unzip_all "file1.zip"
-Z zipinfo(1)-Modus. Wenn die erste Option auf der Befehlszeile -Z ist, werden die verbleibenden Optionen als zipinfo(1)-Optionen angesehen. Eine Beschreibung dieser Optionen finden Sie auf der entsprechenden Handbuchseite.
-1 :listet nur Dateinamen auf, einen pro Zeile. Diese Option schließt alle anderen aus; Header, Trailer und Zipfile-Kommentare werden nie gedruckt. Es ist für die Verwendung in Unix-Shell-Skripten vorgesehen.
Fragen Sie zipinfo
für den Dateinamen, der in der ZIP-Datei aufgeführt ist, und erfassen Sie ihn dann für das Kennwort. Verwenden Sie dieses Passwort, um die Datei zu entpacken:
pw=$(zipinfo -1 file1.zip | cut -d. -f1)
unzip -P "$pw" file1.zip
Beachten Sie, dass das Flag auf zipinfo
gesetzt ist ist eine Eins keine elle .
In großzügiger Anlehnung an Gilles' Antwort auf eine ähnliche Frage ist hier eine Bash-Schleife, die eine passwortgeschützte verschachtelte Zip-Datei extrahiert, bis keine Zip-Dateien mehr vorhanden sind:
shopt -s nullglob
while set -- *.zip; [ $# -eq 1 ]
do
unzippw "$1" && rm -- "$1"
done
Wo ich die Funktion unzippw
definiert habe als Wrapper für zipinfo
und unzip
obige Befehle:
unzippw ()
{
local pw=$(zipinfo -1 "$1" | cut -d. -f1)
unzip -P "$pw" "$1"
}