Genial Script para descarga de ficheros con barra de progreso (wget y Zenity)

 

Un muy útil código que podemos utilizar en nuestros scripts cuando queremos descargar un fichero y mostrar una barra de progreso del mismo (requiere zenity instalado en la máquina).

DOWNLOAD() {
  rand="$RANDOM `date`"
  pipe="/tmp/pipe.`echo '$rand' | md5sum | tr -d ' -'`"
  mkfifo $pipe
  wget -c $1 2>&1 | while read data;do
    if [ "`echo $data | grep '^Length:'`" ]; then
      total_size=`echo $data | grep "^Length:" | sed 's/.*\((.*)\).*/\1/' |  tr -d '()'`
    fi
    if [ "`echo $data | grep '[0-9]*%' `" ];then
      percent=`echo $data | grep -o "[0-9]*%" | tr -d '%'`
      current=`echo $data | grep "[0-9]*%" | sed 's/\([0-9BKMG.]\+\).*/\1/' `
      speed=`echo $data | grep "[0-9]*%" | sed 's/.*\(% [0-9BKMG.]\+\).*/\1/' | tr -d ' %'`
      remain=`echo $data | grep -o "[0-9A-Za-z]*$" `
      echo $percent
      echo "#Downloading $1\n$current of $total_size ($percent%)\nSpeed : $speed/Sec\nEstimated time : $remain"
    fi
  done > $pipe &

  wget_info=`ps ax |grep "wget.*$1" |awk '{print $1"|"$2}'`
  wget_pid=`echo $wget_info|cut -d'|' -f1 `

  zenity --progress --auto-close --text="Connecting to $1\n\n\n" --width="350" --title="Downloading"< $pipe
  if [ "`ps -A |grep "$wget_pid"`" ];then
    kill $wget_pid
  fi
  rm -f $pipe
}

if [ $1 ];then
  DOWNLOAD "$1"
else
  dllink=$(zenity --entry --text "Your download link :" --width="350" --entry-text "" --title="Download url")
  if [ $dllink ];then
    DOWNLOAD "$dllink"
  fi
fi

Via | Ubuntu Forums

13 Responses to “Genial Script para descarga de ficheros con barra de progreso (wget y Zenity)”


  1. 1 leodelacruz diciembre 10, 2010 en 1:08 am

    Espero no moleste el link pero ak postie una interfaz para wget

    taringa.net/posts/linux/7887856/Gwget—gui-para-wget.html

    • 2 superpiwi diciembre 10, 2010 en 4:51 pm

      genial, gracias. aunque esto no es un gestor de descargas, es más una especie de libreria (función) para hacer más bonito la descarga de archivos desde nuestros scripts, o p.ej adaptarlo para que muestre una barra de progreso cuando movemos gran cantidad de archivos de un sitio a otro.

  2. 3 arriagga diciembre 10, 2010 en 2:12 am

    nos podrías dar mas de detalles de como usarlo, pues me parece interesante

    • 4 superpiwi diciembre 10, 2010 en 4:53 pm

      bueno, lo podrias incluir como funcion en tus propios scripts de bash. o usarlo de manera simple. Es decir, copias y pegas y guardas el contenido anterior como “download.sh” por ejemplo. Le das permisos de ejecución: chmod +x download.sh y ya lo puedes usar pasando como parametro la url de descarga:

      ./download.sh “http://ruta_al/fichero_que_quiero_descargar”

  3. 5 Federico Pereira diciembre 10, 2010 en 3:08 pm

    se podrías hacer algo parecido para una compilación de un paquete por ejemplo firefox 4??

    y en ves de usar zenity se podría usar dialog??? para que sea compatible con la consola?

    muy buen post.
    Saludos

  4. 6 Wagner diciembre 10, 2010 en 4:35 pm

    Se podría hacer para la consola???
    supongo que haciendo uso de ncurses, pero soy un gran desconocedor del tema para hacerlo.

  5. 8 José diciembre 11, 2010 en 8:41 pm

    Se puede usar con flashgot?

  6. 9 juan abril 2, 2011 en 1:14 am

    Se podría hacer algo similar para aria2??

  7. 10 Jorge septiembre 18, 2011 en 4:47 pm

    Yo lo he modificado para que funcione con Axel. Por cierto, funciona de maravilla con Flashgot.

    #!/bin/bash

    DOWNLOAD() {
    rand=”$RANDOM`date +”_%Y-%m-%d_%T”`”
    pipe=”/tmp/pipe.`echo $rand`”
    mkfifo $pipe
    axel “$1″ 2>&1 | while read data; do
    if [ "`echo $data | grep '^File size:'`" ]; then
    total_size=`echo $data | grep “^File size:” | awk ‘{print $3}’`
    fi
    if [ "`echo $data | grep '[0-9]*%’`” ]; then
    percent=`echo $data | grep -o “[0-9]*%”`
    speed=`echo $data | cut -d \[ -f 3 | cut -d \] -f 1 | cut -d \, -f 1`
    filesize=`echo “scale=2; $total_size/1024/1024″ | bc`
    echo $percent
    echo “#\n Tamaño: $filesize MB Porcentaje: $percent Velocidad: $speed KB/s \n”
    fi
    done > $pipe &

    filename=`basename $1 | sed -r ‘s|\?.*||’`

    zenity –window-icon=/usr/share/pixmaps/axel-gui.png –progress –auto-close –no-cancel –text=”” –width=”511″ –height=”104″ –title=”$filename”< $pipe
    notify-send –icon="info" -t 4000 "Descarga finalizada" "
    $filename"

    ps ax | grep "$filename" | awk '{print $1}' | xargs kill -SIGKILL
    rm -f $pipe
    }

    cd $HOME/Descargas

    if [ $1 ]; then DOWNLOAD "$1"; else
    url=$(zenity –window-icon=/usr/share/pixmaps/axel-gui.png –entry –text " Introduce la dirección de la descarga :" –width="508" –height="104" –entry-text "`xclip -o`" –title="Gestor de descargas")
    if [ $url ]; then DOWNLOAD "$url"; fi
    fi

  8. 11 David Va septiembre 17, 2012 en 7:25 am

    guau!!! excelente aporte, justo lo que andaba buscando, le hecho algunas mofificaciones y lo he portado a yad y me quedo fabuloso, pronto lo compatiré


  1. 1 Tweets that mention Genial Script para descarga de ficheros con barra de progreso (wget y Zenity) « Ubuntu Life -- Topsy.com Trackback en diciembre 10, 2010 en 2:15 am
  2. 2 BeOSmAn's Blooog | Script con Zenity para mostrar un dialogo de descarga mediante wget Trackback en diciembre 10, 2010 en 9:27 pm

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s





The next version of Ubuntu is coming soon


¿Es compatible tu equipo con Ubuntu?


( Muchos fondos de pantalla, aqui )

DESCARGATE SCIFI LIFE

365 Dias de Soledad
Me debes los sueños, las promesas y las noches rotas. Me debes la paz, la sonrisa y la esperanza robadas. Me debes la sangre, las lágrimas y el sudor vertido. Me debes las noches vacías, los abrazos anhelados. Me debes un beso de ajenjo de tu amarga boca.

The Ubuntu Counter Project - user number # 11961
Geo Visitors Map
diciembre 2010
L M X J V S D
« nov   ene »
 12345
6789101112
13141516171819
20212223242526
2728293031  

Blog Stats

  • 26,586,682 hits

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.032 seguidores

%d personas les gusta esto: