Comando zip: comprimir carpetas, descomprimir con unzip y opciones de compresión

Entorno de pruebaFamilia RHELAlmaLinux 9.8Cuenta rootVerificado el 2026-11-05
Comandos de compresión y archivadozipunzipUbicación/usr/bin/zip
Comprimir carpetas y descomprimir con unzip

El comando zip agrupa archivos y carpetas en Linux en un solo archivo zip comprimido, y para descomprimirlo se usa unzip junto con él. En un servidor AlmaLinux 9, comprimir la carpeta de un sitio web con zip -r redujo 35.825 bytes a 4.158 bytes, y unzip -O corrigió los nombres de archivo ilegibles de un zip creado en Windows.

La salida de abajo procede de una carpeta de trabajo en un servidor AlmaLinux 9.8, ejecutada como root y con horas en UTC. La carpeta site y los archivos de notas que se comprimieron son archivos de ejemplo creados para la prueba. El zip creado en Windows se reprodujo con un archivo de prueba cuyos nombres de archivo se guardaron en CP949.

1️⃣ Cómo usar el comando zip

  • ↪️ Comprimir archivos y carpetas (-r)

Después de zip, escribe primero el nombre del nuevo archivo zip y luego enumera los archivos que quieres meter. El comando de abajo comprime dos archivos, readme.txt y memo.txt, en un solo notes.zip.

zip notes.zip readme.txt memo.txt
  adding: readme.txt (deflated 92%)
  adding: memo.txt (stored 0%)

El [deflated 92%] al final de la línea es cuánto se redujo respecto al tamaño original. El [stored 0%] en la línea de memo.txt, de 71 bytes, significa que se guardó con su tamaño original, sin comprimir.

Para comprimir una carpeta, añade -r. Si escribes solo el nombre de la carpeta sin -r, solo entra la entrada de carpeta site/ y no los archivos que contiene.

zip nodir.zip site
  adding: site/ (stored 0%)

La carpeta site que se va a comprimir tiene tres subcarpetas y seis archivos, como se ve abajo.

site/
css/
style.css
js/
app.js
logs/
access.log
index.html
about.html
.htaccess

Con -r entran las diez entradas: las subcarpetas, los archivos que contienen e incluso .htaccess, cuyo nombre empieza por un punto.

zip -r site.zip site
  adding: site/ (stored 0%)
  adding: site/css/ (stored 0%)
  adding: site/css/style.css (deflated 93%)
  adding: site/js/ (stored 0%)
  adding: site/js/app.js (deflated 87%)
  adding: site/logs/ (stored 0%)
  adding: site/logs/access.log (deflated 94%)
  adding: site/index.html (deflated 91%)
  adding: site/about.html (deflated 87%)
  adding: site/.htaccess (deflated 9%)

Para ver qué contiene un zip terminado sin descomprimirlo, usa unzip -l. Los archivos guardados sumaban 35.825 bytes, y ls -l mostró site.zip con 4.158 bytes.

unzip -l site.zip
Archive:  site.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  10-28-2026 22:10   site/
        0  10-28-2026 22:10   site/css/
     4431  10-28-2026 22:10   site/css/style.css
        0  10-28-2026 22:10   site/js/
     1882  10-28-2026 22:10   site/js/app.js
        0  10-28-2026 22:10   site/logs/
    24134  10-28-2026 22:10   site/logs/access.log
     3723  10-28-2026 22:10   site/index.html
     1612  10-28-2026 22:10   site/about.html
       43  10-28-2026 22:10   site/.htaccess
---------                     -------
    35825                     10 files
ls -l site.zip
-rw-r--r-- 1 root root 4158 Oct 28 23:05 site.zip

2️⃣ Opciones del comando zip

  • ↪️ -x, -u, -d, nivel de compresión, -e

Entre las opciones del comando zip, -x deja fuera los archivos que coinciden con un patrón. Al indicar [site/logs/*] para excluir la carpeta de registros, quedan fuera la carpeta logs y access.log, y solo entran ocho entradas.

zip -r site-nolog.zip site -x 'site/logs/*'
  adding: site/ (stored 0%)
  adding: site/css/ (stored 0%)
  adding: site/css/style.css (deflated 93%)
  adding: site/js/ (stored 0%)
  adding: site/js/app.js (deflated 87%)
  adding: site/index.html (deflated 91%)
  adding: site/about.html (deflated 87%)
  adding: site/.htaccess (deflated 9%)

Rodea el patrón con comillas simples para que el shell no convierta antes [*] en nombres de archivo. Con el mismo fin, el manual oficial pone un ejemplo con una barra invertida delante de [*].

-u vuelve a meter solo los archivos que cambiaron después de crear el zip. Tras añadir una línea al final de index.html, al ejecutar con -ru solo ese archivo se vuelve a meter como [updating].

zip -ru site.zip site
updating: site/index.html (deflated 90%)

Al ejecutar el mismo comando otra vez sin archivos cambiados, no imprimió nada y el código de salida fue 12. En el manual oficial, 12 significa que zip no tiene nada que hacer.

zip -ru site.zip site; echo $?
12

Para borrar entradas dentro de un archivo zip, usa -d. Al indicar [site/logs/*], la entrada de la carpeta logs y access.log se borran de site.zip.

zip -d site.zip 'site/logs/*'
deleting: site/logs/
deleting: site/logs/access.log

Los números de -0 a -9 son el nivel de compresión, y según el manual oficial el valor predeterminado es -6. Se comprimió tres veces la misma carpeta site con -q, que no imprime nada, para comparar tamaños. Como en la prueba de -u se añadió una línea a index.html, el total de los archivos originales es ahora de 35.875 bytes.

zip -qr -0 level0.zip site
zip -qr level6.zip site
zip -qr -9 level9.zip site
ls -l level*.zip
-rw-r--r-- 1 root root 37433 Oct 28 23:05 level0.zip
-rw-r--r-- 1 root root  4179 Oct 28 23:05 level6.zip
-rw-r--r-- 1 root root  3874 Oct 28 23:05 level9.zip
Nivel de compresiónTamaño del archivo zipRespecto al total original
Total de archivos originales35.875 bytes100%
-0 (sin compresión)37.433 bytes104.3%
-6 (predeterminado)4.179 bytes11.6%
-9 (compresión máxima)3.874 bytes10.8%

Los 37.433 bytes creados con -0 superaron el total original de 35.875 bytes. Es el tamaño de los datos sin comprimir más 1.558 bytes de información de cabecera, como nombres de archivo y horas, que se añaden a cada entrada. -9 quedó 305 bytes por debajo del valor predeterminado, y toda la diferencia vino del archivo más grande, access.log.

Para poner una contraseña, añade -e. La contraseña se escribe dos veces, y los caracteres no aparecen en pantalla.

zip -e secret.zip memo.txt
Enter password:
Verify password:
  adding: memo.txt (stored 0%)

Incluso secret.zip, creado con -e, mostró con unzip -l los nombres, tamaños y fechas de los archivos sin pedir contraseña. Solo se cifra el contenido de los archivos, así que no sirve para material en el que también haya que ocultar los nombres.

unzip -l secret.zip
Archive:  secret.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       71  10-28-2026 22:10   memo.txt
---------                     -------
       71                     1 file

-P, que pone la contraseña directamente en la línea de comandos, es una opción que el manual oficial advierte que no es segura, porque otros usuarios del mismo servidor pueden ver los comandos en ejecución. El manual también describe el propio cifrado estándar de zip como relativamente débil.

Al descomprimir un zip creado con -e, unzip pide la contraseña para cada archivo y, si la escribes bien, ese archivo se descomprime.

unzip secret.zip -d dec
Archive:  secret.zip
[secret.zip] memo.txt password:
 extracting: dec/memo.txt

📌 Opciones principales: resultados de este artículo

OpciónTareaResultado en este artículo
zip -rIncluye todas las subcarpetas y archivos de la carpetaSin -r, una línea adding: site/; con -r, diez entradas incluido .htaccess
zip -xDeja fuera los archivos que coinciden con un patrónAl excluir site/logs/*, solo entran ocho entradas, sin la carpeta logs ni access.log
zip -uVuelve a meter solo los archivos que cambiaron después de crear el zipUna línea updating: site/index.html (deflated 90%); sin cambios, nada de salida y código de salida 12
zip -dBorra entradas dentro del archivo zipdeleting: site/logs/ y deleting: site/logs/access.log
zip -qOculta las líneas que se muestran al comprimirLos tres comandos comprimidos con -qr (-0, predeterminado, -9) terminan sin líneas adding
zip -0Guarda sin comprimirlevel0.zip ocupa 37433 bytes, más que el total original
zip -9Comprime al mínimo tamaño (predeterminado -6)level9.zip 3874 bytes; level6.zip, creado con el valor predeterminado, 4179 bytes
zip -ePide una contraseña y cifra el contenidoPide Enter password: y Verify password:, y luego adding: memo.txt (stored 0%)
unzip -lMuestra la lista de entradas guardadas sin descomprimirsite.zip con 10 files, 35825 bytes en total
unzip -dIndica la carpeta de destino y la crea si no existeEmpieza por creating: restore/site/ y la estructura de la carpeta site se descomprime dentro de restore
unzip -oSobrescribe todos los archivos existentes sin preguntarCinco líneas inflating sin preguntas
unzip -nOmite los archivos existentes sin preguntarNo aparece nada después de la línea Archive: site.zip
unzip -tComprueba los datos comprimidos sin descomprimirOK en cada entrada y No errors detected; el broken.zip truncado da End-of-central-directory signature not found
unzip -OIndica la codificación de caracteres de los nombres dentro del zipCon -O CP949 los nombres ilegibles aparecen como 보고서.txt y 견적서.txt («informe» y «presupuesto» en coreano)
unzip -pEnvía el contenido descomprimido a la salida estándar en lugar de crear archivosSolo aparecen las dos líneas de .htaccess, sin crear archivos

📎 Otras opciones: según el manual oficial

OpciónTarea
zip -mBorra los archivos y carpetas originales tras comprimir (los borra cuando el zip está terminado, y el manual oficial recomienda usarla con -T)
zip -jGuarda solo los nombres de archivo, sin rutas de carpeta
zip -yGuarda el enlace simbólico como enlace en lugar del archivo al que apunta
zip -TComprueba el zip creado y, si la prueba falla, no cambia el zip original
zip -fSustituye solo las entradas que ya están en el zip por los archivos cambiados y no añade archivos nuevos
zip -iIncluye solo los archivos que coinciden con el patrón indicado
zip -PEscribe la contraseña directamente en la línea de comandos (el manual oficial advierte que no es seguro)
unzip -jDescomprime solo los archivos en una carpeta, sin crear la estructura de carpetas del zip
unzip -xIndica las entradas que no se descomprimen
unzip -qOculta las líneas que se muestran al descomprimir
unzip -uDescomprime solo los archivos que faltan en el disco y los más nuevos
unzip -vAñade a la lista el método de compresión, el tamaño comprimido, la proporción y el CRC

3️⃣ Cómo usar el comando unzip

  • ↪️ Descomprimir zip en Linux con -d, -o y -n

Para descomprimir un archivo zip en Linux, escribe el nombre del zip después de unzip. Si no indicas una carpeta con -d, se descomprime en la carpeta actual (según el manual oficial), así que esta vez se indicó la carpeta restore.

unzip site.zip -d restore
Archive:  site.zip
   creating: restore/site/
   creating: restore/site/css/
  inflating: restore/site/css/style.css
   creating: restore/site/js/
  inflating: restore/site/js/app.js
  inflating: restore/site/index.html
  inflating: restore/site/about.html
  inflating: restore/site/.htaccess

Si la carpeta indicada con -d no existe, unzip la crea y descomprime debajo la estructura de la carpeta site tal cual.

Si vuelves a descomprimir en el mismo sitio, unzip se detiene cada vez que encuentra un archivo existente y pregunta si quieres sobrescribirlo. Si eliges [N]one, termina sin sobrescribir ninguno de los archivos restantes.

unzip site.zip -d restore
Archive:  site.zip
replace restore/site/css/style.css? [y]es, [n]o, [A]ll, [N]one, [r]ename: N

Para hacerlo sin preguntas, añade -o o -n. -o sobrescribe todos los archivos existentes y -n los omite. Como el manual oficial califica -o de opción peligrosa, comprueba antes que la carpeta se puede sobrescribir y solo entonces añade -o.

unzip -o site.zip -d restore
Archive:  site.zip
  inflating: restore/site/css/style.css
  inflating: restore/site/js/app.js
  inflating: restore/site/index.html
  inflating: restore/site/about.html
  inflating: restore/site/.htaccess
unzip -n site.zip -d restore
Archive:  site.zip

Si descomprimes con -n donde ya existen todos los archivos, no aparece nada después de la línea Archive.

Para descomprimir solo una parte de un zip, escribe una ruta o un patrón después del nombre del zip. Al indicar [site/css/*] se descomprimen solo la carpeta css y style.css.

unzip site.zip 'site/css/*' -d part
Archive:  site.zip
   creating: part/site/css/
  inflating: part/site/css/style.css

4️⃣ Errores de unzip

  • ↪️ End-of-central-directory y nombres de archivo ilegibles

Comprueba con unzip -t un zip recibido de otro servidor antes de descomprimirlo. Si los datos comprimidos no tienen problemas, cada entrada muestra OK y la última línea dice [No errors detected].

unzip -t site.zip
Archive:  site.zip
    testing: site/                    OK
    testing: site/css/                OK
    testing: site/css/style.css       OK
    testing: site/js/                 OK
    testing: site/js/app.js           OK
    testing: site/index.html          OK
    testing: site/about.html          OK
    testing: site/.htaccess           OK
No errors detected in compressed data of site.zip.

Un zip al que le faltaba el final porque se cortó la transferencia terminó con [End-of-central-directory signature not found]. Es el resultado de comprobar con -t un broken.zip que conservaba solo los primeros 2.000 bytes de site.zip, que había quedado en 2.436 bytes tras borrar con -d las entradas de logs.

unzip -t broken.zip
Archive:  broken.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of broken.zip or
        broken.zip.zip, and cannot find broken.zip.ZIP, period.

unzip lee primero la lista de archivos que está al final del zip (el central directory). Por eso no pudo comprobar ni la primera entrada de broken.zip, al que le faltaba el final.

Un archivo que no es zip dio el mismo mensaje. Al abrir con unzip site.tar.gz, empaquetado con tar, terminó con el mismo error; un archivo tar.gz se descomprime con el comando tar.

unzip site.tar.gz
Archive:  site.tar.gz
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of site.tar.gz or
        site.tar.gz.zip, and cannot find site.tar.gz.ZIP, period.

Un zip creado en Windows a veces guarda los nombres de archivo en una codificación de caracteres de Windows en lugar de UTF-8. Al abrir con unzip -l en un servidor UTF-8 report-win.zip, cuyos nombres se guardaron en CP949, los nombres de archivo salieron como símbolos ilegibles.

unzip -l report-win.zip
Archive:  report-win.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       26  10-28-2026 22:10   ║╕░э╝н.txt
       17  10-28-2026 22:10   ░▀└√╝н.txt
---------                     -------
       43                     2 files

Si escribes después de -O la codificación de caracteres del Windows que creó el zip, los nombres se ven bien, y los archivos descomprimidos con la misma opción se crean con su nombre original.

unzip -O CP949 -l report-win.zip
Archive:  report-win.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       26  10-28-2026 22:10   보고서.txt
       17  10-28-2026 22:10   견적서.txt
---------                     -------
       43                     2 files
unzip -O CP949 report-win.zip -d win
Archive:  report-win.zip
  inflating: win/보고서.txt
  inflating: win/견적서.txt

Según la ayuda de unzip, -O es la opción para zip creados en DOS o Windows, y -I para zip creados en otros sistemas.

Los mensajes de error que aparecieron al descomprimir y lo que hay que comprobar a continuación son estos.

SalidaSignificadoQué revisar después
End-of-central-directory signature not foundNo se encuentra la lista de archivos al final del zip: el archivo está truncado o no es un zipComparar el tamaño con el original y volver a descargarlo · tar.gz con tar
cannot find or openNo hay ningún archivo con ese nombre en la carpeta actualNombre y ubicación del archivo con ls
skipping: … incorrect passwordLa contraseña falló tres veces y se omitió ese archivo (código de salida 82)Mayúsculas y minúsculas de la contraseña e idioma de entrada
Nombres de archivo convertidos en símbolosNombres guardados en una codificación de caracteres de WindowsEsa codificación (CP949, etc.) después de -O

🔲 Simulador del comando zip

En el simulador de abajo puedes escribir tú mismo los pasos: comprimir con zip y luego ver la lista o descomprimir con unzip.

Simulador del comando zipZip 3.0 · UnZip 6.00
[root@server work]#
Funciona solo dentro del navegador y no comprime archivos reales. Las proporciones de compresión son valores medidos, y los archivos nuevos creados en el simulador tienen valores estimados. Con ↑↓ recuperas los comandos que escribiste antes.

🔢 FAQ & contenido recomendado

Al abrir con unzip un archivo .gz comprimido con gzip, terminó con [End-of-central-directory signature not found]. Al descomprimirlo con [gzip -d readme.txt.gz], readme.txt.gz volvió a ser readme.txt. Un .tar.gz, hecho empaquetando varios archivos con tar y comprimiéndolos después con gzip, se descomprime de una vez con tar.

En el servidor AlmaLinux 9 que revisamos, zip y unzip eran comandos instalados por los paquetes zip y unzip, respectivamente. Por eso, en la familia RHEL se instalan con [sudo dnf install zip unzip] y en la familia Debian con [sudo apt install zip unzip] (según la lista oficial de paquetes de Debian).

Si escribes después de unzip -p el archivo zip y la ruta dentro de él, el contenido sale directamente en pantalla. Al ejecutar [unzip -p site.zip site/.htaccess] solo aparecieron las dos líneas de .htaccess, sin crear ningún archivo.

ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Demuestra que eres humano: 7   +   9   =