Wget en Linux: guía práctica con ejemplos reales

wget

Qué es wget

wget es una utilidad de línea de comandos para descargar contenidos de la web sin depender de interfaces gráficas. Nació en el ecosistema GNU y, pese a su apariencia austera, sigue siendo la navaja suiza para descargas reproducibles, automatizables y resistentes. En mi día a día me ha salvado descargas cuando la conexión iba a tirones: reanudar sin empezar de cero es una de esas pequeñas maravillas que hacen que wget sea difícil de reemplazar.

como funciona wget

GNU, multiplataforma y filosofía de software libre

wget es software libre y gratuito. Eso no es solo una etiqueta: significa transparencia, auditoría y control total. Aunque su hogar natural es Linux, hoy puedo usarlo también en macOS y Windows, lo que me permite estandarizar scripts en equipos mixtos sin dolores de cabeza. Me gusta su sencillez: ligero, sin adornos, perfecto para meter en cron, en contenedores y en máquinas remotas con pocos recursos.

Instalación y primeros pasos

En la mayoría de distros Linux, wget ya viene instalado. Si no, bastan estos comandos:

  • Debian/Ubuntu:
sudo apt update && sudo apt install -y wget
  • Fedora:
sudo dnf install -y wget
  • Arch:
sudo pacman -S wget

Comprobar versión y ayuda rápida

wget --version
wget --help | less

La ayuda es clara y los ejemplos son concisos; cuando probé los flags por primera vez, me sorprendió lo coherente que es la sintaxis.

12+ recetas de wget que sí usarás

Aquí van las recetas que realmente uso (o he visto usar) y que cubren la mayoría de casos reales. Cuando necesito ser cuidadoso con la red de la oficina, limitar la velocidad y los reintentos me evita saturar la línea y quedar mal con el equipo.

Reanudar descargas inestables (-c)

Si una descarga se corta, no empieces de cero:

wget -c https://ejemplo.com/archivo.iso
  • -c (continue) añade al final del archivo parcial.
  • Útil con conexiones inestables o ficheros grandes.

Limitar ancho de banda por descarga (--limit-rate)

Para no acaparar la red:

wget --limit-rate=500k https://ejemplo.com/video.mp4

Acepta k, m y g. Lo combino con espera aleatoria cuando lanzo muchas descargas.

Descargar múltiples archivos desde una lista (-i)

Mantén un txt con URLs (una por línea):

wget -i urls.txt -P ./descargas
  • -P guarda todo en el directorio indicado.
  • Añade --continue y --timestamping para reanudar y evitar descargas repetidas.

Guardar con otro nombre y directorio (-O, -P)

Renombrar destino:

wget -O ubuntu.iso https://releases.ubuntu.com/.../imagen.iso

Guardar en carpeta concreta:

wget -P ./isos https://servidor/imagen.iso

Descargas en segundo plano (-b) y logs

Cuando no quiero tener la terminal “ocupada”:

wget -b https://ejemplo.com/backup.tar.gz -o wget.log
tail -f wget.log
  • -b (background) + -o para log.
  • tail -f para monitorizar en tiempo real.

Mirror de sitios con exclusiones inteligentes (--mirror, --no-parent, --reject)

Para clonar un sitio estático sin basura innecesaria:

wget --mirror --convert-links --page-requisites \
     --no-parent --reject "*.zip,*.mp4" \
     -P ./mirror https://ejemplo.com/docs/
  • --mirror equivale a -r -N -l inf --no-remove-listing.
  • --no-parent evita subir a directorios superiores.
  • --convert-links rehace enlaces para navegar offline.

Detección de enlaces rotos (modo spider)

Comprobar si una web tiene enlaces caídos:

wget --spider -r -l 3 -nd -H -t 2 -w 1 \
     -o spider.log https://ejemplo.com
grep -E "broken|404|ERROR" spider.log

Reintentos, esperas y random-wait sin saturar

Cuando lanzo lotes, juego seguro:

wget -t 5 --wait=2 --random-wait --retry-connrefused \
     --timeout=30 https://ejemplo.com/datos.csv
  • -t 5: hasta 5 intentos.
  • --wait + --random-wait: pausas humanas para evitar rate limits.

Autenticación básica, headers y cookies

Descargas detrás de sesión o token:

# Básica (¡evita en texto plano si puedes!)
wget --user=usuario --password=secreta https://intranet/privado.pdf

# Header con token Bearer
wget --header="Authorization: Bearer $TOKEN" https://api/descarga

# Con cookies (previas)
wget --load-cookies cookies.txt https://sitio/archivo.zip

En mi experiencia, cargar cookies previamente exportadas del navegador resuelve muchos accesos sin pelear con SSO complejos.

Descargar por rangos o patrones

Para series numeradas:

wget https://servidor/logs/app-2025-10-{01..09}.log

Con --accept/--reject filtras por extensión al hacer descargas recursivas.

Trabajar vía FTP y FTPS

wget --ftp-user=usuario --ftp-password=clave \
     ftp://ftp.ejemplo.com/backup/diario.tar.gz

Si el FTP admite TLS, usa ftps://.

Evitar descargas duplicadas (--timestamping o -N)

Solo descarga si el remoto es más nuevo:

wget -N https://servidor/dataset.csv

Esto me ahorra tiempo y ancho de banda en jobs programados.

Proxy y user-agent personalizado

https_proxy=http://proxy.local:8080 wget \
  --user-agent="Mozilla/5.0 (compatible; ScriptDescargas/1.0)" \
  https://ejemplo.com/archivo

Algunos servidores bloquean agentes por defecto; cambiar el UA suele bastar.

Casos avanzados y automatización

Retries, backoff y control fino por host

Cuando descargo de varios dominios, limito conexiones simultáneas:

wget -r --wait=1 --random-wait --limit-rate=300k \
     --domains=ejemplo.com,cdn.ejemplo.com \
     https://ejemplo.com/coleccion/

Así evito castigar un host concreto y mantengo la red “respirando”.

Autenticación, headers y cookies (APIs/descargas privadas)

En entornos corporativos combino cookies con --header para adjuntar tokens transitorios. Si falla, envío --referer o --content-disposition para respetar nombres de archivo del servidor:

wget --content-disposition --trust-server-names \
     --header="Authorization: Bearer $TOKEN" \
     "https://api.ejemplo.com/reportes?id=123"

Programar con cron y scripts Bash

Un job de cron que corre cada madrugada y no duplica:

# /usr/local/bin/descarga_diaria.sh
#!/usr/bin/env bash
set -euo pipefail
DEST="/var/backups/datos"
mkdir -p "$DEST"
wget -N --limit-rate=400k -P "$DEST" https://servidor/datos.csv

Cron:

0 3 * * * /usr/local/bin/descarga_diaria.sh >> /var/log/descargas.log 2>&1

Cuando necesito robustez adicional, uso -t, --timeout y salidas a log con -o.

Buenas prácticas y errores comunes

  • Usa -N y -c con cabeza: no mezcles si el servidor no soporta rangos o Last-Modified.
  • Respeta robots y TOS: el modo recursivo no es carta blanca; limita la profundidad -l.
  • Time-outs y DNS: ajusta --dns-timeout, --connect-timeout y --read-timeout en redes problemáticas.
  • Rutas con espacios: comillas siempre.
  • Certificados: si hay TLS corporativo, añade CA al trust store; evita --no-check-certificate salvo diagnóstico.

Wget vs curl: cuándo usar cada uno

  • wget brilla en descargas no interactivas: reintentos integrados, recursividad, mirror, control de velocidad y timestamping. Para mí, es ideal cuando quiero lanzar y olvidarme; de hecho, lo suelo poner en cron porque su comportamiento por defecto es muy “descargador”.
  • curl es excelente para interacciones HTTP complejas: APIs, verbos distintos a GET, subida de datos, form-data, pipes con jq. También descarga, pero carece de recursividad nativa y mirror.
  • Regla rápida personal: si voy a bajar y ya, wget. Si voy a hablar con un servicio (autenticación avanzada, POST/PUT, depurar headers), curl.

FAQs rápidas

¿Cómo reanudo una descarga interrumpida?
wget -c URL.

¿Cómo limito la velocidad?
wget --limit-rate=500k URL.

¿Cómo descargo varias URLs?
wget -i lista.txt.

¿Cómo hago un espejo sin subir de nivel?
wget --mirror --no-parent URL.

¿Cómo evito bajar otra vez lo mismo?
wget -N URL.

¿Cómo programo todo esto?
Pon el script en /usr/local/bin y crea un cron (ejemplo arriba).


Sobre Wget

wget es ese compañero silencioso que hace el trabajo: fiable, ligero y muy script-friendly. En mi caso, poder reanudar sin drama, limitar el ancho de banda y automatizar con cron me ahorra horas y evita disgustos con la red. Si vienes de gestores gráficos, prueba dos o tres recetas de aquí y verás por qué sigue siendo imprescindible.


Tabla express de flags útiles

FlagPara qué sirveNota rápida
-cReanudar descargasEvita empezar de cero
-NTimestampingSolo baja si hay cambios
-O / -PRenombrar / Ruta destinoControl del output
--limit-rateLimitar velocidadAcepta k/m/g
-bSegundo planoÚsalo con -o para logs
--mirrorEspejo de sitioCombina recursivo + timestamp
--spiderVerificar enlacesIdeal para auditorías
-t, --wait, --random-waitReintentos y pausasMenos riesgo de bloqueo
--header, --load-cookiesAcceso privadoTokens y sesiones
--user-agentCambiar agenteEvitar bloqueos por defecto

Opinión Personal

Wget es de esas herramientas que no presumen, pero nunca fallan. Cuanto más ruido hacen los gestores de descargas con interfaces brillantes, más valoro lo esencial: una utilidad ligera, libre y transparente que hace exactamente lo que promete. Para mí, su mayor virtud es la fiabilidad en situaciones reales: conexiones inestables, servidores lentos, cortes inesperados… con -c reanudo sin dramas y sigo con mi día. Ese “set and forget” que te permite lanzar un script, limitar el ancho de banda y dejar que trabaje en segundo plano, es oro en entornos donde la red es compartida.

También me parece una lección de diseño: pocas banderas, muy potentes. --limit-rate para no saturar, -N para no descargar de nuevo lo mismo, --mirror para replicar sitios con cabeza. Sumado a que es multiplataforma, puedo estandarizar procesos en Linux, macOS o Windows sin rehacer mi enfoque. Y aunque adoro curl para hablar con APIs, cuando el objetivo es descargar bien y a la primera, sigo confiando en wget. No me distrae, no me engaña con promesas vacías y, sobre todo, me da control fino con logs, reintentos y esperas aleatorias para respetar al servidor.

¿Inconvenientes? Solo uno: subestimarlo. Mucha gente lo prueba una vez, se queda con el “wget URL y ya”, y se pierde la mitad de su poder. En cuanto incorporas un puñado de flags a tu flujo—continuar, timestamping, headers/cookies—la herramienta se convierte en un compañero silencioso que te ahorra tiempo todos los días.

Ahora te leo a ti: ¿qué te ha salvado wget últimamente?, ¿qué receta usas a diario o qué problema no has conseguido resolver aún? Déjame tus comentarios y experiencias abajo; así pulimos una guía con casos reales que de verdad te funcione.

Deja un comentario

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