GNU/Linux >> Tutoriales Linux >  >> Linux

Bash loop descomprimir secuencia de comandos de archivo con contraseña

Si no tiene y no puede instalar zipinfo por cualquier razón, puedes imitarlo usando unzip con -Z opción. Para listar el contenido del zip use unzip -Z1 :

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

Póngalo en un bucle:

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 función recursiva:

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 modo zipinfo(1). Si la primera opción en la línea de comando es -Z, las opciones restantes se toman como opciones zipinfo(1). Consulte la página del manual correspondiente para obtener una descripción de estas opciones.

-1:enumera solo los nombres de archivo, uno por línea. Esta opción excluye todas las demás; los encabezados, los avances y los comentarios de los archivos comprimidos nunca se imprimen. Está diseñado para usarse en scripts de shell de Unix.


Preguntar zipinfo para el nombre de archivo que aparece en el archivo zip, luego captúrelo para la contraseña. Usa esa contraseña para descomprimir el archivo:

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

Tenga en cuenta que la bandera a zipinfo es un uno no es un bueno .

Tomando prestado generosamente de la respuesta de Gilles a una pregunta similar, aquí hay un ciclo bash que extraerá un archivo zip anidado protegido con contraseña hasta que no haya más archivos zip:

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

Donde he definido la función unzippw como envoltorio para el zipinfo y unzip comandos anteriores:

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

Linux
  1. ¿Se puede conectar un script Bash a un archivo?

  2. Bash Script:¿Comprobar si un archivo es un archivo de texto?

  3. Unzip piensa que el archivo zip es una bomba zip?

  4. ¿Cómo resaltar los scripts de Bash en Vim?

  5. Compara sumas md5 en script bash

Cómo descomprimir un archivo ZIP en Ubuntu/Linux

Comando Linux Zip y Unzip con ejemplos

Golpear mientras se repite

Golpear hasta bucle

35 ejemplos de secuencias de comandos Bash

Cómo descomprimir un archivo zip en Linux [Tutorial para principiantes]