Guía completa de los comandos Linux zip, unzip y grep: sintaxis, opciones y ejemplos prácticos
Introducción
En el día a día de un desarrollador, administrador de sistemas o cualquier persona que trabaje con la terminal de Linux, es común necesitar comprimir archivos, extraerlos o buscar patrones dentro de grandes volúmenes de texto. Los comandos zip, unzip y grep son herramientas fundamentales para estas tareas. En este artículo vas a aprender en detalle qué hace cada uno, cuál es su sintaxis básica, cuáles son las opciones o flags más usadas y verás ejemplos prácticos que podés aplicar inmediatamente en tu flujo de trabajo.
Este post está dirigido a quienes ya tienen nociones básicas de la línea de comandos pero quieren profundizar y usar estas herramientas de forma más eficiente. Al terminar, vas a estar capaz de:
- Crear y gestionar archivos comprimidos con zip y unzip.
- Realizar búsquedas de texto avanzadas con grep.
- Evitar errores comunes y aplicar buenas prácticas.
Zip: comprimir archivos y directorios
Qué hace
El comando zip crea archivos de archivo comprimido en formato .zip, uno de los formatos más portátiles y ampliamente soportados. Permite empaquetar uno o varios archivos o directorios, reduciendo su tamaño mediante algoritmos de compresión sin pérdida y facilitando su transferencia o almacenamiento.
Sintaxis básica
zip [opciones] nombre_del_archivo.zip archivo1 [archivo2 ...]
Si querés comprimir un directorio completo, basta con indicarlo como argumento; zip lo procesará de forma recursiva por defecto.
Opciones/flags más usadas
| Opción | Descripción | Ejemplo de uso |
|---|---|---|
-r |
Recursivo: incluye subdirectorios y su contenido. | zip -r copia.zip proyecto/ |
-q |
Modo silencioso: suprime la salida informativa. | zip -q archivo.zip *.txt |
-9 |
Nivel máximo de compresión (más lento pero archivo más pequeño). | zip -9 -r backup.zip docs/ |
-e |
Cifra el archivo zip con contraseña (se te pedirá que la ingreses dos veces). | zip -e secreto.zip documento.pdf |
-u |
Actualiza: agrega solo los archivos nuevos o modificados respecto al zip existente. | zip -u sitio.zip index.html sitio.zip |
-d |
Elimina archivos del archivo zip. | zip -d sitio.zip viejo.html |
-l |
Convierte finales de línea Unix a DOS (útil al compartir con Windows). | zip -l texto.zip script.sh |
-X |
Excluye atributos extra del sistema de archivos (UID/GID, permisos). | zip -X -r limpio.zip carpeta/ |
-@ |
Lee la lista de archivos desde stdin (ideal para combinar con find). |
`find . -name "*.log" -mtime +30 |
Ejemplos prácticos
Comprimir un solo archivo
zip informe.zip informe.pdfCrea
informe.zipconteniendo únicamenteinforme.pdf.Comprimir un directorio y todo su contenido
zip -r sitio_web.zip sitio_web/El flag
-rasegura que se incluyan todos los subdirectorios y archivos dentro desitio_web/.Crear un zip con máxima compresión
zip -9 -r archivos_antiguos.zip /home/user/documentos/Útil cuando el espacio es crítico y el tiempo de compresión no es un problema.
Proteger un zip con contraseña
zip -e confidencial.zip contrato.pdfSe te pedirá ingresar y confirmar la contraseña; el archivo resultante solo podrá abrirse con ella.
Actualizar un zip existente
zip -u proyecto.zip src/main.cSi
main.ccambió desde la última vez que se creóproyecto.zip, será reemplazado dentro del archivo.Excluir ciertos tipos de archivos
zip -r proyecto.zip proyecto/ -x "*.tmp" -x "*.log"El
-xpermite excluir patrones; aquí se omiten archivos temporales y de log.Generar un zip a partir de una lista obtenida con find
find /var/log -name "*.log" -mtime +7 -print0 | zip -@ -0 logs_antiguos.zip-print0y-0manejan correctamente nombres con espacios.
Unzip: extraer archivos de un archivo .zip
Qué hace
unzip lee un archivo .zip y extrae su contenido al sistema de archivos actual o a un directorio especificado. Es la herramienta complementaria a zip para descomprimir y restaurar archivos.
Sintaxis básica
unzip [opciones] archivo.zip [archivo1 [archivo2 ...]] [-d directorio_destino]
Si no especificás archivos particulares, se extraerá todo el contenido. La opción -d permite cambiar el directorio de destino.
Opciones/flags más usadas
| Opción | Descripción | Ejemplo de uso |
|---|---|---|
-l |
Lista el contenido sin extraer. | unzip -l paquete.zip |
-q |
Modo silencioso. | unzip -q archivo.zip |
-o |
Sobrescribe archivos existentes sin preguntar. | unzip -o actualizacion.zip |
-n No sobrescribe: extrae solo si el archivo destino no existe. |
unzip -n copia.zip |
|
-d |
Directorio donde se extraerán los archivos. | unzip archivo.zip -d /opt/app/ |
-j |
«Junk paths»: ignora la estructura de directorios y extrae todos los archivos en el directorio actual. | unzip -j archivo.zip |
-x |
Excluir ciertos archivos de la extracción. | unzip archivo.zip -x "*.bak" |
-P |
Proporciona la contraseña para zip cifrados (menos seguro, se muestra en ps). | unzip -P secreta123 protegido.zip |
-Z |
Muestra información del archivo zip (similar a zipinfo). |
unzip -Z archivo.zip |
Ejemplos prácticos
Listar el contenido de un zip
unzip -l despliegue.zipMuestra nombre, tamaño comprimido, fecha y relación de compresión de cada entrada.
Extraer todo a un directorio específico
unzip paquete.zip -d /var/www/html/Los archivos se colocarán dentro de
/var/www/html/manteniendo su estructura interna.Extraer sin sobrescribir archivos existentes
unzip -n actualizacion.zipSi ya tenés una versión de algún archivo, se dejará tal cual y no será reemplazado.
Sobrescribir todo sin confirmación
unzip -o emergencia.zipÚtil en scripts donde no querés intervención manual.
Extraer solo ciertos tipos de archivos
unzip documento.zip "*.pdf" -d pdfs/Extrae únicamente los archivos con extensión .pdf dentro del zip a la carpeta
pdfs/.Ignorar la estructura de directorios
unzip -j fotos.zip -d /tmp/imagenes/Todas las imágenes quedarán directamente en
/tmp/imagenes/, sin subcarpetas.Proveer contraseña (no recomendado en producción)
unzip -P miClaveSecreta backup.zipMejor usar
-Psolo en entornos de prueba; para producción, ingresá la contraseña cuando se solicite para evitar que quede en el historial.
Grep: buscar patrones dentro de archivos
Qué hace
grep (Global Regular Expression Print) examina líneas de texto y muestra aquellas que coinciden con un patrón especificado, el cual puede ser una cadena simple o una expresión regular. Es una de las herramientas más poderosas para filtrar, auditar y analizar logs, código fuente o cualquier archivo de texto.
Sintaxis básica
grep [opciones] patrón archivo1 [archivo2 ...]
Si no se indica ningún archivo, grep lee desde la entrada estándar (stdin), lo que permite combinarlo con otros comandos mediante tuberías.
Opciones/flags más usadas
| Opción | Descripción | Ejemplo de uso |
|---|---|---|
-i |
Ignora mayúsculas/minúsculas. | grep -i error log.txt |
-v |
Invierte la coincidencia: muestra líneas que NO contienen el patrón. | grep -v "TODO" src/*.c |
-r / -R |
Búsqueda recursiva en directorios. | grep -r "funcion_init" /opt/app/ |
-l |
Lista solo los nombres de archivos que contienen al menos una coincidencia. | grep -l "FIXME" *.py |
-L |
Lista archivos que no contienen el patrón. | grep -L "license" *.txt |
-n |
Muestra el número de línea donde se encontró la coincidencia. | grep -n "fallo" sistema.log |
-c |
Cuenta cuántas líneas coinciden en cada archivo. | grep -c "warning" build.log |
-o |
Muestra solo la parte que coincide con el patrón (útil con regex). | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+ versiones.txt` |
-E |
Interpreta el patrón como expresión regular extendida (equivale a egrep). |
`grep -E "error |
-F |
Trata el patrón como cadena fija (no como expresión regular). Útil cuando el patrón contiene caracteres especiales. | grep -F "*.conf" lista.txt |
-A n |
Muestra n líneas después de cada coincidencia. |
grep -A 3 "Inicio" arranque.log |
-B n |
Muestra n líneas antes de cada coincidencia. |
grep -B 2 "Error" error.log |
-C n |
Muestra n líneas antes y después (contexto). |
grep -C 1 "exception*" trace.log |
--color |
Resalta la coincidencia en color (muy útil en terminal). | grep --color=auto "pid" /proc/*/status |
-z |
Trata la entrada como secuencia de entrada como separada por null en lugar de newline (útil con find -print0). |
`find . -name "*.tmp" -print0 |
Ejemplos prácticos
Búsqueda simple de una palabra
grep "constante" configuracion.iniDevuelve todas las líneas que contienen la palabra constante.
Ignorar mayúsculas y minúsculas
grep -i "timeout" /var/log/syslogEncuentra tanto "timeout" como "Timeout" o "TIMEOUT).
Buscar en todos los archivos de un directorio de forma recursiva
grep -r "def main" ~/proyectos/Recorre subdirectorios y muestra coincidencias con el número de línea y el archivo.
Mostrar solo los nombres de archivos que contienen el patrón
grep -l "TODO" *.jsÚtil para generar un listado de archivos que requieren atención.
Contar cuántas veces aparece un patrón
grep -c "404" acceso.logDevuelve el número de líneas que tienen el código de estado 404.
Mostrar número de línea y resaltar en color
grep -n --color=auto "segmentation fault" core.dumpCada coincidencia se mostrará en rojo (o el color configurado) y precedida por su número de línea.
Contexto alrededor de la coincidencia
grep -C 2 "fallo crítico" aplicación.logMuestra dos líneas antes y dos después de cada línea que contiene "fallo crítico).
Invocar una expresión regular extendida
grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}" log.csvCaptura líneas que comienzan con una fecha en formato YYYY-MM-DD.
Buscar una cadena literal que contiene puntos o asteriscos
grep -F "version=1.2.3" notas.txtSin
-F, los puntos serían interpretados como cualquier carácter; con-Fse busca exactamente esa cadena.Combinar con
findyxargspara procesar muchos archivosfind /var/log -type f -name "*.log" -print0 | xargs -0 grep -i "panic"Evita problemas con nombres de archivo que contengan espacios o saltos de línea.
Buenas prácticas y errores comunes
Zip / Unzip
- No confíes en la compresión para seguridad: un zip protegido con contraseña sigue siendo susceptible a ataques de fuerza bruta si la contraseña es débil. Usá cifrado fuerte (por ejemplo, GPG) si la confidencialidad es crítica.
- Evita comprimir archivos ya comprimidos (como .jpg, .mp3, .zip). El ganancia será mínima y perderás tiempo CPU.
- Usá
-qen scripts para no llenar la salida con información innecesaria, pero dejá un modo verbose (-v) cuando esté depurando. - Recordá que
unzip -osobrescribe sin preguntar; en entornos de producción, preferí-no hacé una copia de seguridad antes de ejecutar. - Cuando necesites excluir varios patrones, podés encadenar múltiples
-xo usar un archivo con exclusiones (-x @excluir.lst). - Para archivos muy grandes, considerá usar
zip -FFpara reparar o dividir (-s) el archive en volúmenes más manejables.
Grep
- No uses
grep . *para listar todos los archivos de un directorio; es ineficiente y puede generar salida confusa. Prefiráfindols. - Escapá correctamente los metacaracteres cuando no quieras que sean interpretados como regex; o mejor aún, usá
-Fpara cadenas literales. - En scripts, siempre verificá el código de salida (
$?) para saber si se encontró alguna coincidencia (0 = sí, 1 = no, 2 = error). - Combina
-lconxargspara actuar únicamente sobre los archivos que contienen el patrón (por ejemplo, para reemplazar texto solo en aquellos). - Cuando trabajés con Unicode, aseguráte de que tu locale esté configurado adecuadamente (
export LC_ALL=en_US.UTF-8) para que grep maneje correctamente caracteres fuera del ASCII. - Evita usar
-ren directorios con muchos enlaces simbólicos que formen ciclos; usá-Rcon la opción--exclude-dirpara evitar bucles.
Conclusión
Hemos recorrido en detalle los tres comandos esenciales de la terminal de Linux: zip, unzip y grep. Viste qué hace cada uno, su sintaxis básica, las opciones o flags que más se utilizan en la práctica y una variedad de ejemplos que podés copiar y pegar directamente en tu terminal.
Con estos conocimientos podés:
- Empaquetar y proteger tus archivos de forma eficiente.
- Extraer información de archivos comprimidos sin sorpresas.
- Realizar búsquedas de texto potentes y flexibles, ya sea en un solo archivo o en árboles completos de directorios.
Recordá aplicar las buenas prácticas señaladas y evitar los errores más frecuentes para que tus scripts y flujos de trabajo sean más seguros, predecibles y rápidos.
Si te quedó alguna duda o querés profundizar en algún caso de uso específico (por ejemplo, combinar zip con ssh para respaldos remotos, o usar grep con expresiones regulares avanzadas para análisis de logs), no dudes en dejar un comentario o consultar la documentación oficial (man zip, man unzip, man grep). ¡Éxitos con la terminal!
DUGLAS MORENO
Comentarios (0)
Sé el primero en comentar.