Descomprimir un archivo en Linux es sencillo, pero que pasa si lo que queremos es descomprimir muchos archivos al mismo tiempo, con diferentes formatos de compresión (.rar, .zip, .7z, etc) y si algunos tienen contraseña.
El siguiente script en bash hace precisamente esto. Solo dele permisos de ejecución:
#!/usr/bin/env bash shopt -s extglob nullglob nocaseglob passw=( ejemplo1 ejemplo2 ejemplo3 ejemplo4 ejemplo5 ejemplo6 ejemplo7 ejemplo8 ) 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 zip
Nomenclatura:
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 coincidenciasLa 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,