Guía completa de los comandos Linux zip, unzip y grep: sintaxis, opciones y ejemplos prácticos

DUGLAS MORENODUGLAS MORENO 👁 30

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

  1. Comprimir un solo archivo

    zip informe.zip informe.pdf
    

    Crea informe.zip conteniendo únicamente informe.pdf.

  2. Comprimir un directorio y todo su contenido

    zip -r sitio_web.zip sitio_web/
    

    El flag -r asegura que se incluyan todos los subdirectorios y archivos dentro de sitio_web/.

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

  4. Proteger un zip con contraseña

    zip -e confidencial.zip contrato.pdf
    

    Se te pedirá ingresar y confirmar la contraseña; el archivo resultante solo podrá abrirse con ella.

  5. Actualizar un zip existente

    zip -u proyecto.zip src/main.c
    

    Si main.c cambió desde la última vez que se creó proyecto.zip, será reemplazado dentro del archivo.

  6. Excluir ciertos tipos de archivos

    zip -r proyecto.zip proyecto/ -x "*.tmp" -x "*.log"
    

    El -x permite excluir patrones; aquí se omiten archivos temporales y de log.

  7. Generar un zip a partir de una lista obtenida con find

    find /var/log -name "*.log" -mtime +7 -print0 | zip -@ -0 logs_antiguos.zip
    

    -print0 y -0 manejan 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

  1. Listar el contenido de un zip

    unzip -l despliegue.zip
    

    Muestra nombre, tamaño comprimido, fecha y relación de compresión de cada entrada.

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

  3. Extraer sin sobrescribir archivos existentes

    unzip -n actualizacion.zip
    

    Si ya tenés una versión de algún archivo, se dejará tal cual y no será reemplazado.

  4. Sobrescribir todo sin confirmación

    unzip -o emergencia.zip
    

    Útil en scripts donde no querés intervención manual.

  5. 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/.

  6. Ignorar la estructura de directorios

    unzip -j fotos.zip -d /tmp/imagenes/
    

    Todas las imágenes quedarán directamente en /tmp/imagenes/, sin subcarpetas.

  7. Proveer contraseña (no recomendado en producción)

    unzip -P miClaveSecreta backup.zip
    

    Mejor usar -P solo 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

  1. Búsqueda simple de una palabra

    grep "constante" configuracion.ini
    

    Devuelve todas las líneas que contienen la palabra constante.

  2. Ignorar mayúsculas y minúsculas

    grep -i "timeout" /var/log/syslog
    

    Encuentra tanto "timeout" como "Timeout" o "TIMEOUT).

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

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

  5. Contar cuántas veces aparece un patrón

    grep -c "404" acceso.log
    

    Devuelve el número de líneas que tienen el código de estado 404.

  6. Mostrar número de línea y resaltar en color

    grep -n --color=auto "segmentation fault" core.dump
    

    Cada coincidencia se mostrará en rojo (o el color configurado) y precedida por su número de línea.

  7. Contexto alrededor de la coincidencia

    grep -C 2 "fallo crítico" aplicación.log
    

    Muestra dos líneas antes y dos después de cada línea que contiene "fallo crítico).

  8. Invocar una expresión regular extendida

    grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}" log.csv
    

    Captura líneas que comienzan con una fecha en formato YYYY-MM-DD.

  9. Buscar una cadena literal que contiene puntos o asteriscos

    grep -F "version=1.2.3" notas.txt
    

    Sin -F, los puntos serían interpretados como cualquier carácter; con -F se busca exactamente esa cadena.

  10. Combinar con find y xargs para procesar muchos archivos

    find /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á -q en scripts para no llenar la salida con información innecesaria, pero dejá un modo verbose (-v) cuando esté depurando.
  • Recordá que unzip -o sobrescribe sin preguntar; en entornos de producción, preferí -n o hacé una copia de seguridad antes de ejecutar.
  • Cuando necesites excluir varios patrones, podés encadenar múltiples -x o usar un archivo con exclusiones (-x @excluir.lst).
  • Para archivos muy grandes, considerá usar zip -FF para 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á find o ls.
  • Escapá correctamente los metacaracteres cuando no quieras que sean interpretados como regex; o mejor aún, usá -F para 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 -l con xargs para 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 -r en directorios con muchos enlaces simbólicos que formen ciclos; usá -R con la opción --exclude-dir para 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!

Comentarios (0)

Sé el primero en comentar.

Dejá tu comentario