Descompresión masiva
Pues bien, el siguiente script en bash hace precisamente esto. Solo dele permisos de ejecución:
#!/usr/bin/env bash shopt -s extglob nullglob nocaseglob passw=( passfoo passbar passfoobar banana chocolate whiskey vodka icecream ) for f in *.@(rar|zip|zip.001|7z|7z.001); do [[ ( "$f" =~ \.part[[:digit:]]+\.rar$ ) && ! ( "$f" =~ \.part0*1\.rar$ ) ]] && continue for p in "${passw[@]}"; do if 7z x -y -p"$p" "$f" -aoa; then break fi done done
Dependencias:
p7zip-full p7zip-rar # packages used for testing sharutils rar unrar tar unzip zipNomenclatura:
La opción
shopt -s
habilita las opciones de shell que no están habilitadas por defecto (shopt -u
para deshabilitar las opciones).extglob
una característica que le permite hacer *.@(zip|7z|rar|etc)
para que coincida con diferentes extensiones de archivo, que se expande a *.zip *.7z, *.rar, etc., y a todos los archivos en el directorio que termina en esa extensión en particular (si existen).nullglob
es para evitar error del script si no hay archivos que terminen en *.@(zip|7z|rar|etc)
(si no hay, no hace nada). Se recomienda agregar todos los formatos deseados (ejecute 7z i
).nocaseglob
para que coincida con nombres como FOO.RAR con el patrón establecido *.@(zip|7z|rar|etc)
.break
interrumpe la búsqueda si hay coincidencias
La variable
passw
se encarga de almacenar las contraseñas. Cámbielas por las suyas.
La línea
Nota: Los archivos 7-Zip usan LZMA y LZMA2, que puede generar incompatibilidad con las herramientas estándar de Linux (tar, bzip2, xz, gzip)
.
[[ ( "$f" =~ \.part[[:digit:]]+\.rar$ ) && ! ( "$f" =~ \.part0*1\.rar$ ) ]] && continue
es para solucionar el problema de la descompresión de multipartes .rar (part1.rar, part2.rar, part01.rar, part001.rar etc)Nota: Los archivos 7-Zip usan LZMA y LZMA2, que puede generar incompatibilidad con las herramientas estándar de Linux (tar, bzip2, xz, gzip)
Fuente consultada: superuser, 7z Linux, novatoz, 7zip SDK,
Post a Comment