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