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.

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

Generamos un primer documento plano de prueba utilizando el comando 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.

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).

Podemos inspeccionar los atributos y el tamaño en disco de archive.zip mediante la instrucción 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.

Para simular la disposición típica de una aplicación, creamos dos subcarpetas con 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.

De forma análoga, generamos un archivo de registro con 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.

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.

Verificamos la disparidad de tamaños entre la compresión habitual y la optimizada lanzando 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.

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.

Con el fin de evitar mezclar archivos en el directorio actual, preparamos una carpeta de salida limpia mediante 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.

Comprobamos que toda la estructura de subdirectorios y ficheros se restauró correctamente mediante 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.

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.

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.

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.

Para contrastar el conjunto final de archivos empaquetados y sus respectivas dimensiones, ejecutamos 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.