GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Schleife zum Entpacken von passwortgeschützten Dateien

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"
}

Linux
  1. Kann ein Bash-Skript mit einer Datei verknüpft werden?

  2. Warum erkennt das Bash-Skript keine Aliase?

  3. Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

  4. Bash-Skript:Prüfen, ob eine Datei eine Textdatei ist?

  5. Wie stoppe ich das Loop Bash-Skript im Terminal?

So entpacken Sie eine ZIP-Datei in Ubuntu / Linux

Linux Zip- und Unzip-Befehl mit Beispielen

Bash-while-Schleife

Bash bis Loop

35 Bash-Skriptbeispiele

So entpacken Sie eine Zip-Datei unter Linux [Anfänger-Tutorial]