GNU/Linux >> Tutoriels Linux >  >> Linux

Boucle Bash décompressez le script de fichier avec mot de passe

Si vous n'avez pas et ne pouvez pas installer zipinfo pour une raison quelconque, vous pouvez l'imiter en utilisant unzip avec -Z option. Pour lister le contenu du zip, utilisez unzip -Z1 :

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

Mettez-le dans une boucle :

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

ou une fonction récursive :

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 mode zipinfo(1). Si la première option de la ligne de commande est -Z, les options restantes sont considérées comme des options zipinfo(1). Voir la page de manuel appropriée pour une description de ces options.

-1 :ne liste que les noms de fichiers, un par ligne. Cette option exclut toutes les autres ; les en-têtes, les bandes-annonces et les commentaires des fichiers zip ne sont jamais imprimés. Il est destiné à être utilisé dans les scripts shell Unix.


Demandez zipinfo pour le nom de fichier répertorié dans le fichier zip, puis capturez-le pour le mot de passe. Utilisez ce mot de passe pour décompresser le fichier :

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

Notez que le drapeau à zipinfo est un un pas un ell .

Empruntant généreusement à la réponse de Gilles à une question similaire, voici une boucle bash qui extraira un fichier zip imbriqué protégé par mot de passe jusqu'à ce qu'il n'y ait plus de fichiers zip :

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

Où j'ai défini la fonction unzippw comme wrapper pour le zipinfo et unzip commandes ci-dessus :

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

Linux
  1. Pourquoi le script Bash ne reconnaît-il pas les alias ?

  2. Script Bash :vérifier si un fichier est un fichier texte ?

  3. Exécuter un fichier de script sur Ssh via Sudo ?

  4. Comment vérifier la sous-chaîne dans Shell Script Bash?

  5. Comment mettre en surbrillance les scripts Bash dans Vim ?

Comment décompresser un fichier ZIP dans Ubuntu / Linux

Commande Linux Zip et Unzip avec exemples

Bash pendant la boucle

Bash jusqu'à la boucle

35 exemples de scripts bash

Comment décompresser un fichier Zip sous Linux [Tutoriel du débutant]