Comando zip en Linux Ubuntu: guía práctica de compresión

Introducción

Empaquetar y comprimir datos de forma ágil resulta imprescindible en la administración cotidiana de sistemas GNU/Linux, ya sea para distribuir despliegues o resguardar directorios voluminosos. En este artículo repasamos a fondo el uso de las herramientas zip y unzip, cubriendo desde su aprovisionamiento inicial y la gestión de árboles de directorios hasta filtros avanzados de exclusión y protección mediante clave.

Instalación de paquetes y empaquetado inicial

Para poner en marcha el entorno de pruebas en Ubuntu, actualizamos el catálogo de repositorios y descargamos las utilidades pertinentes ejecutando apt-get update -qq && apt-get install -y zip unzip.

apt-get update -qq && apt-get install -y zip unzip

A continuación, preparamos un espacio aislado de trabajo y entramos en él mediante mkdir -p ~/zip_demo && cd ~/zip_demo.

mkdir -p ~/zip_demo && cd ~/zip_demo

Generamos un primer documento plano de prueba utilizando el comando echo "Sample text file 1" > file1.txt.

echo “Sample text file 1” > file1.txt

Creamos un segundo fichero complementario mediante echo "Sample text file 2" > file2.txt para incluirlo en el mismo lote.

echo “Sample text file 2” > file2.txt

La utilidad zip combina múltiples elementos individuales dentro de un único contenedor .zip con compresión sin pérdidas.
En este caso, empaquetamos file1.txt y file2.txt generando el archivo archive.zip.
⚙️ [Parámetros destacados]

-r : Procesa jerarquías completas de directorios de modo recursivo.
-e : Solicita una contraseña para cifrar el archivo de salida.
-u : Actualiza el contenedor agregando sólo ficheros nuevos o modificados recientemente.
-m : Elimina automáticamente los elementos originales tras consolidar el archivo.
-d : Suprime elementos específicos almacenados dentro de un zip ya existente.
-q : Modo silencioso que suprime los registros de salida en consola.
-0 ~ -9 : Ajusta la intensidad del algoritmo, desde almacenamiento plano (-0) hasta la máxima reducción de peso (-9).

zip archive.zip file1.txt file2.txt

Podemos inspeccionar los atributos y el tamaño en disco de archive.zip mediante la instrucción ls -lh archive.zip.

ls -lh archive.zip

Procesamiento recursivo (-r) y ratio máximo de compresión (-9)

Nos posicionamos nuevamente sobre la raíz de nuestro entorno de pruebas ejecutando cd ~/zip_demo.

cd ~/zip_demo

Para simular la disposición típica de una aplicación, creamos dos subcarpetas con mkdir -p project/src project/logs.

mkdir -p project/src project/logs

Añadimos un fichero representativo de código fuente ejecutando echo "console.log('App running');" > project/src/app.js.

echo “console.log(‘App running’);” > project/src/app.js

De forma análoga, generamos un archivo de registro con echo "System initialized" > project/logs/app.log.

echo “System initialized” > project/logs/app.log

Al incorporar el modificador -r, el comando recorre íntegramente la estructura de project y agrupa todos sus componentes en project.zip.
La traza de ejecución confirma que cada nodo y subdirectorio quedó integrado fielmente.

zip -r project.zip project

Si el objetivo primordial consiste en ahorrar el mayor ancho de banda o almacenamiento posible, podemos combinar la bandera recursiva con -9 para construir project_max.zip. Esta alternativa demanda un mayor esfuerzo de CPU a cambio de un archivo más compacto.

zip -9 -r project_max.zip project

Verificamos la disparidad de tamaños entre la compresión habitual y la optimizada lanzando ls -lh project*.zip.

ls -lh project*.zip

Inspección previa (-l) y descompresión en rutas destino (-d)

Regresamos a la carpeta de prácticas invocando cd ~/zip_demo.

cd ~/zip_demo

Antes de extraer cualquier paquete, la opción -l del comando unzip nos da visibilidad total del árbol interno, reportando tamaños, nombres y fechas sin alterar el disco.

unzip -l project.zip

Con el fin de evitar mezclar archivos en el directorio actual, preparamos una carpeta de salida limpia mediante mkdir -p ~/zip_demo/extracted.

mkdir -p ~/zip_demo/extracted

Empleando el modificador -d, volcamos ordenadamente el contenido de project.zip dentro del directorio ~/zip_demo/extracted.
El registro en pantalla evidencia cómo se reconstruyen las rutas relativas de forma controlada.

unzip project.zip -d ~/zip_demo/extracted

Comprobamos que toda la estructura de subdirectorios y ficheros se restauró correctamente mediante ls -R ~/zip_demo/extracted.

ls -R ~/zip_demo/extracted

Filtros de exclusión (-x) y protección por contraseña

Volvemos a ubicarnos en el área base mediante cd ~/zip_demo.

cd ~/zip_demo

Durante la preparación de paquetes de despliegue suele ser necesario ignorar ficheros temporales o bitácoras. Usando la cláusula -x "*.log", generamos project_no_logs.zip omitiendo cualquier archivo con dicha extensión.

zip -r project_no_logs.zip project -x “*.log”

Auditamos el nuevo paquete con unzip -l project_no_logs.zip para validar que las reglas de filtrado se aplicaron de forma estricta sobre app.log.

unzip -l project_no_logs.zip

En escenarios donde se requiere confidencialidad inmediata, podemos recurrir al argumento -P para fijar una clave de cifrado junto a -r, originando el archivo protegido project_encrypted.zip a partir de project/src.

zip -P SecurePass123! -r project_encrypted.zip project/src

Para contrastar el conjunto final de archivos empaquetados y sus respectivas dimensiones, ejecutamos ls -lh project_*.zip.

ls -lh project_*.zip

Con esta serie de ejemplos prácticos dispones de las pautas esenciales para dominar el archivado y desarchivado mediante la terminal en Ubuntu. Integrar estos parámetros en tus flujos de trabajo diarios te otorgará mayor rapidez y control en la gestión de tus entornos Linux.