lunes, 28 de noviembre de 2011

Un gestor de descargas programado en bash


El gestor de descargas favorito de todo sysadmin debería de ser un script programado en bash. Perl también sería otra opción, pero soy menos hábil en ese lenguaje. Lo único que necesita el script son los comandos básicos (echo, awk), uno para comprimir (gzip) y el que vamos a usar para descargar (wget).

El script es el siguiente:

Pastie | Mystic Paste
-----------------[ descarga.sh ]-----------------
#!/bin/bash

WGET_OPTS="-c"

graba_msg_error() {
  ERRORNO=$1
  case $ERRORNO in
    0) MSG_ERR="No problems occurred." ;;
    1) MSG_ERR="Generic error code." ;;
    2) MSG_ERR="Parse error --- for instance, \
when parsing command-line options, the .wgetrc \
or .netrc..." ;;
    3) MSG_ERR="File I/O error." ;;
    4) MSG_ERR="Network failure." ;;
    5) MSG_ERR="SSL verification failure." ;;
    6) MSG_ERR="Username/password authentication \
failure.";;
    7) MSG_ERR="Protocol errors." ;;
    8) MSG_ERR="Server issued an error response." ;;
    *) MSG_ERR="Unknown." ;;
  esac

  echo "(**) RESULTADO DEL COMANDO: $ERRORNO -- \
$MSG_ERR" >>$NOMBRE.log

}

while read LINEA;
do

  NOMBRE=$( echo $LINEA | awk '{print $1}' )
  URL=$( echo $LINEA | awk '{print $2}' )
  echo -n "Descargando $NOMBRE desde $URL..."
  wget $WGET_OPTS -o $NOMBRE.log -O $NOMBRE "$URL"
  N_ERROR=$?
  graba_msg_error $N_ERROR
  gzip -v9 $NOMBRE.log >>$NOMBRE.log 2>&1
  if [ $N_ERROR == "0" ]; then
    echo "OK"
  else
    echo "ERROR!"
    echo "=> N_ERROR = $N_ERROR, ver el log para \
mas informacion."
  fi

done <$1
-----------------[ descarga.sh ]-----------------

El modo de empleo es:

./descarga.sh <fichero_urls.txt>

El parámetro <fichero_urls.txt> es un fichero con líneas, donde en cada línea pones el nombre del fichero y la URL que quieres descargar. Por cada descarga se genera un fichero .log con la salida del comando wget (además de grabarse el fichero de la descarga si esta ha sido correcta). El flag "-c" que se pasa a wget sirve para continuar las descargas que estuvieran a medias. Como característica adicional, se ha programado una función (graba_msg_error) para el control de errores de wget.

No hay comentarios:

Publicar un comentario