GNU/Linux >> Linux Esercitazione >  >> Linux

Bash loop decomprimere lo script di file con password

Se non hai e non puoi installare zipinfo per qualsiasi motivo, puoi imitarlo usando unzip con -Z opzione. Per elencare il contenuto del codice postale usa unzip -Z1 :

pw="$(unzip -Z1 file1.zip | cut -f1 -d'.')" 
unzip -P "$pw" file1.zip

Mettilo in loop:

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

o una funzione ricorsiva:

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 modalità zipinfo(1). Se la prima opzione sulla riga di comando è -Z, le restanti opzioni vengono prese come opzioni zipinfo(1). Vedere la pagina di manuale appropriata per una descrizione di queste opzioni.

-1 :elenca solo i nomi dei file, uno per riga. Questa opzione esclude tutte le altre; intestazioni, trailer e commenti di file zip non vengono mai stampati. È inteso per l'uso negli script della shell Unix.


Chiedi zipinfo per il nome file elencato nel file zip, quindi acquisiscilo per la password. Usa quella password per decomprimere il file:

pw=$(zipinfo -1 file1.zip | cut -d. -f1)
unzip -P "$pw" file1.zip

Nota che il flag a zipinfo è uno non un ell .

Prendendo liberamente in prestito dalla risposta di Gilles a una domanda simile, ecco un ciclo bash che estrarrà un file zip nidificato protetto da password fino a quando non ci saranno più file zip:

shopt -s nullglob
while set -- *.zip; [ $# -eq 1 ]
do 
  unzippw "$1" && rm -- "$1"
done

Dove ho definito la funzione unzippw come involucro per il zipinfo e unzip comandi sopra:

unzippw ()
{
    local pw=$(zipinfo -1 "$1" | cut -d. -f1)
    unzip -P "$pw" "$1"
}

Linux
  1. Uno script Bash può essere agganciato a un file?

  2. Script Bash:controlla se un file è un file di testo?

  3. Eseguire un file di script su Ssh tramite Sudo?

  4. Come controllare la sottostringa in Shell Script Bash?

  5. Unzip pensa che il file zip sia una bomba zip?

Come decomprimere un file ZIP in Ubuntu / Linux

Comando zip e decomprimi Linux con esempi

Bash mentre Loop

Bash fino a Loop

35 Esempi di script Bash

Come decomprimere un file zip in Linux [Tutorial per principianti]