Clase 04 — Descargas y Transferencias de Archivos
Descargar archivos
# Guardar con nombre personalizado (-o)
curl -o mi-archivo.json https://httpbin.org/get
# Guardar con nombre original (-O)
curl -O https://releases.ubuntu.com/22.04/SHA256SUMS
# Barra de progreso simplificada
curl -# -o ubuntu.iso https://ejemplo.com/ubuntu.iso
# Silencioso
curl -s -o ubuntu.iso https://ejemplo.com/ubuntu.iso
Reanudar descargas
# Reanudar descarga interrumpida
curl -C - -O https://ejemplo.com/archivo-grande.zip
# Script con reintentos
for intento in {1..5}; do
echo "Intento $intento..."
if curl -C - -o "$ARCHIVO" "$URL"; then
echo "✅ Descarga completada"
break
fi
sleep 5
done
Seguir redirecciones (-L)
curl -L https://github.com/roxsross
# Limitar redirecciones
curl -L --max-redirs 3 https://httpbin.org/redirect/5
# Ver las redirecciones
curl -sIL https://httpbin.org/redirect/3 2>&1 | grep -i "location\|HTTP"
Limitar velocidad y timeouts
# Limitar velocidad de descarga
curl --limit-rate 1M -O https://ejemplo.com/archivo.zip
# Timeouts (recomendado en scripts)
curl --connect-timeout 5 --max-time 30 https://api.ejemplo.com/datos
# Reintentos automáticos
curl --retry 3 --retry-delay 2 --retry-all-errors https://api.ejemplo.com/datos
Verificar antes de descargar
# Ver tamaño sin descargar (HEAD)
curl -sI https://ejemplo.com/archivo | grep -i content-length
# Verificar tipo de archivo
curl -sI https://ejemplo.com/archivo | grep -i content-type
# Verificar si soporta reanudación
curl -sI https://ejemplo.com/archivo | grep -i accept-ranges
Descargar múltiples archivos
# Desde un archivo de URLs
xargs -n1 curl -O < urls.txt
# Con paralelismo
cat urls.txt | xargs -P 4 -n1 curl -sO
# Rango de URLs
curl -O "https://ejemplo.com/img/foto_[001-100].jpg"
Ejemplo: Descargar herramientas DevOps
#!/bin/bash
DESTINO="${HOME}/.local/bin"
mkdir -p "$DESTINO"
OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
ARCH="$(uname -m)"
[[ "$ARCH" == "x86_64" ]] && ARCH="amd64"
[[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]] && ARCH="arm64"
# kubectl
KUBECTL_VERSION=$(curl -L -s https://dl.k8s.io/release/stable.txt)
curl -sL -o "$DESTINO/kubectl" \
"https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${OS}/${ARCH}/kubectl"
chmod +x "$DESTINO/kubectl"
echo "✅ kubectl $KUBECTL_VERSION"
Ejemplo: Descarga con verificación de checksum
#!/bin/bash
URL="https://ejemplo.com/release/app-2.0.tar.gz"
CHECKSUM_URL="${URL}.sha256"
ARCHIVO="app-2.0.tar.gz"
curl -sL -o "$ARCHIVO" "$URL"
EXPECTED=$(curl -sL "$CHECKSUM_URL" | awk '{print $1}')
ACTUAL=$(shasum -a 256 "$ARCHIVO" | awk '{print $1}')
if [[ "$EXPECTED" == "$ACTUAL" ]]; then
echo "✅ Checksum OK"
else
echo "❌ Checksum NO coincide!"
rm -f "$ARCHIVO"
exit 1
fi
Ejercicios
- Descargá un archivo grande y practicá reanudar la descarga con
-C - - Creá un script que descargue 5 archivos en paralelo usando
xargs - Usá
curl -Ipara verificar el tamaño y tipo de 3 archivos antes de descargarlos - Implementá un script de descarga con reintentos y verificación de checksum