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






Espero no moleste el link pero ak postie una interfaz para wget
taringa.net/posts/linux/7887856/Gwget—gui-para-wget.html
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.
nos podrías dar mas de detalles de como usarlo, pues me parece interesante
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”
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
Se podría hacer para la consola???
supongo que haciendo uso de ncurses, pero soy un gran desconocedor del tema para hacerlo.
me imagino que si, no deberia ser muy problematico adaptarlo.
Se puede usar con flashgot?
Se podría hacer algo similar para aria2??
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
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é