Comando zip: comprimir carpetas, descomprimir con unzip y opciones de compresión
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
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.
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.zipArchive: 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 filesls -l site.zip-rw-r--r-- 1 root root 4158 Oct 28 23:05 site.zip2️⃣ Opciones del comando zip
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 siteupdating: 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 $?12Para 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.logLos 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 sitezip -qr level6.zip sitezip -qr -9 level9.zip sitels -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ón | Tamaño del archivo zip | Respecto al total original |
|---|---|---|
| Total de archivos originales | 35.875 bytes | 100% |
| -0 (sin compresión) | 37.433 bytes | 104.3% |
| -6 (predeterminado) | 4.179 bytes | 11.6% |
| -9 (compresión máxima) | 3.874 bytes | 10.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.txtEnter 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.zipArchive: 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 decArchive: secret.zip
[secret.zip] memo.txt password:
extracting: dec/memo.txt📌 Opciones principales: resultados de este artículo
| Opción | Tarea | Resultado en este artículo | |
|---|---|---|---|
| zip -r | Incluye todas las subcarpetas y archivos de la carpeta | Sin -r, una línea adding: site/; con -r, diez entradas incluido .htaccess | |
| zip -x | Deja fuera los archivos que coinciden con un patrón | Al excluir site/logs/*, solo entran ocho entradas, sin la carpeta logs ni access.log | |
| zip -u | Vuelve a meter solo los archivos que cambiaron después de crear el zip | Una línea updating: site/index.html (deflated 90%); sin cambios, nada de salida y código de salida 12 | |
| zip -d | Borra entradas dentro del archivo zip | deleting: site/logs/ y deleting: site/logs/access.log | |
| zip -q | Oculta las líneas que se muestran al comprimir | Los tres comandos comprimidos con -qr (-0, predeterminado, -9) terminan sin líneas adding | |
| zip -0 | Guarda sin comprimir | level0.zip ocupa 37433 bytes, más que el total original | |
| zip -9 | Comprime al mínimo tamaño (predeterminado -6) | level9.zip 3874 bytes; level6.zip, creado con el valor predeterminado, 4179 bytes | |
| zip -e | Pide una contraseña y cifra el contenido | Pide Enter password: y Verify password:, y luego adding: memo.txt (stored 0%) | |
| unzip -l | Muestra la lista de entradas guardadas sin descomprimir | site.zip con 10 files, 35825 bytes en total | |
| unzip -d | Indica la carpeta de destino y la crea si no existe | Empieza por creating: restore/site/ y la estructura de la carpeta site se descomprime dentro de restore | |
| unzip -o | Sobrescribe todos los archivos existentes sin preguntar | Cinco líneas inflating sin preguntas | |
| unzip -n | Omite los archivos existentes sin preguntar | No aparece nada después de la línea Archive: site.zip | |
| unzip -t | Comprueba los datos comprimidos sin descomprimir | OK en cada entrada y No errors detected; el broken.zip truncado da End-of-central-directory signature not found | |
| unzip -O | Indica la codificación de caracteres de los nombres dentro del zip | Con -O CP949 los nombres ilegibles aparecen como 보고서.txt y 견적서.txt («informe» y «presupuesto» en coreano) | |
| unzip -p | Envía el contenido descomprimido a la salida estándar en lugar de crear archivos | Solo aparecen las dos líneas de .htaccess, sin crear archivos |
📎 Otras opciones: según el manual oficial
| Opción | Tarea | |
|---|---|---|
| zip -m | Borra los archivos y carpetas originales tras comprimir (los borra cuando el zip está terminado, y el manual oficial recomienda usarla con -T) | |
| zip -j | Guarda solo los nombres de archivo, sin rutas de carpeta | |
| zip -y | Guarda el enlace simbólico como enlace en lugar del archivo al que apunta | |
| zip -T | Comprueba el zip creado y, si la prueba falla, no cambia el zip original | |
| zip -f | Sustituye solo las entradas que ya están en el zip por los archivos cambiados y no añade archivos nuevos | |
| zip -i | Incluye solo los archivos que coinciden con el patrón indicado | |
| zip -P | Escribe la contraseña directamente en la línea de comandos (el manual oficial advierte que no es seguro) | |
| unzip -j | Descomprime solo los archivos en una carpeta, sin crear la estructura de carpetas del zip | |
| unzip -x | Indica las entradas que no se descomprimen | |
| unzip -q | Oculta las líneas que se muestran al descomprimir | |
| unzip -u | Descomprime solo los archivos que faltan en el disco y los más nuevos | |
| unzip -v | Añ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
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 restoreArchive: 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/.htaccessSi 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 restoreArchive: site.zip
replace restore/site/css/style.css? [y]es, [n]o, [A]ll, [N]one, [r]ename: NPara 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 restoreArchive: 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/.htaccessunzip -n site.zip -d restoreArchive: site.zipSi 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 partArchive: site.zip
creating: part/site/css/
inflating: part/site/css/style.css4️⃣ Errores de unzip
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.zipArchive: 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.zipArchive: 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.gzArchive: 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.zipArchive: report-win.zip
Length Date Time Name
--------- ---------- ----- ----
26 10-28-2026 22:10 ║╕░э╝н.txt
17 10-28-2026 22:10 ░▀└√╝н.txt
--------- -------
43 2 filesSi 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.zipArchive: report-win.zip
Length Date Time Name
--------- ---------- ----- ----
26 10-28-2026 22:10 보고서.txt
17 10-28-2026 22:10 견적서.txt
--------- -------
43 2 filesunzip -O CP949 report-win.zip -d winArchive: report-win.zip
inflating: win/보고서.txt
inflating: win/견적서.txtSegú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.
| Salida | Significado | Qué revisar después |
|---|---|---|
| End-of-central-directory signature not found | No se encuentra la lista de archivos al final del zip: el archivo está truncado o no es un zip | Comparar el tamaño con el original y volver a descargarlo · tar.gz con tar |
| cannot find or open | No hay ningún archivo con ese nombre en la carpeta actual | Nombre y ubicación del archivo con ls |
| skipping: … incorrect password | La 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ímbolos | Nombres guardados en una codificación de caracteres de Windows | Esa 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.
🔢 FAQ & contenido recomendado
WordPress · Plugins
Cómo instalar un plugin de WordPress: instalación desde el buscador, subida del ZIP y activación
Los pasos para instalar un plugin desde la pantalla Añadir plugins, buscando en el directorio oficial o subiendo un archivo zip.
Buscar
Comando find de Linux
El comando find busca archivos por condiciones como nombre, extensión, tamaño y fecha, y sigue trabajando con los archivos que encuentra.
Gestión de archivos
Opciones del comando cp y sobrescritura masiva al ejecutarlo
Las opciones del comando cp para copiar archivos y directorios, y cómo copiar en bloque sin confirmación de sobrescritura.
ℹ️ 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.