2011-01-13 13 views
39

Por ejemplo:¿Cómo mostrar la barra de progreso de wget solamente?

wget http://somesite.com/TheFile.jpeg

downloading: TheFile.tar.gz ... 
--09:30:42-- http://somesite.com/TheFile.jpeg 
      => `/home/me/Downloads/TheFile.jpeg' 
Resolving somesite.co... xxx.xxx.xxx.xxx. 
Connecting to somesite.co|xxx.xxx.xxx.xxx|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 1,614,820 (1.5M) [image/jpeg] 

25% [======>        ] 614,424  173.62K/s ETA 00:14 

¿Cómo puedo conseguir que se vea como este

downloading: TheFile.jpeg ... 
25% [======>        ] 614,424  173.62K/s ETA 00:14 

Sé rizo puede hacer eso, sin embargo tengo que conseguir wget para hacer ese trabajo .

+1

No creo que esto sea posible sin escribir un script para analizar salida de wget. 'wget -nv' es lo más cercano que va a obtener, y en realidad no muestra una barra de progreso, solo un resumen de una línea cuando finaliza la descarga. – cdhowie

Respuesta

18

Puede utilizar el siguiente filtro:

progressfilt() 
{ 
    local flag=false c count cr=$'\r' nl=$'\n' 
    while IFS='' read -d '' -rn 1 c 
    do 
     if $flag 
     then 
      printf '%c' "$c" 
     else 
      if [[ $c != $cr && $c != $nl ]] 
      then 
       count=0 
      else 
       ((count++)) 
       if ((count > 1)) 
       then 
        flag=true 
       fi 
      fi 
     fi 
    done 
} 

Uso:

$ wget --progress=bar:force http://somesite.com/TheFile.jpeg 2>&1 | progressfilt 
100%[======================================>] 15,790  48.8K/s in 0.3s 

2011-01-13 22:09:59 (48.8 KB/s) - 'TheFile.jpeg' saved [15790/15790] 

Esta función depende de una secuencia de 0x0d0x0a0x0d0x0a0x0d ser enviado justo antes de que se inicie la barra de progreso. Este comportamiento puede depender de la implementación.

-4
curl -o pic.png http://somesite.com/pic.png 

Muestra solo la información de progreso sin la URL/chatter de dirección.

+2

Dijo muy específicamente que no quería usar 'curl' –

2

Esta es otra exemple, tal vez le ayudará a

download() { 
    local url=$1 
    echo -n " " 
    wget --progress=dot $url 2>&1 | grep --line-buffered "%" | sed -u -e "s,\.,,g" | awk '{printf("\b\b\b\b%4s", $2)}' 
    echo -ne "\b\b\b\b" 
    echo " DONE" 
} 
4

Puede utilizar las opciones estándar:

wget --progress=bar http://somesite.com/TheFile.jpeg 
+0

No me refiero a algunas otras distribuciones, pero definitivamente esto no es lo que OP solicitó, al menos en Ubuntu. Es decir, todavía muestra otra información, pero el OP solicitó la "barra de progreso solamente" ... –

6

Puede utilizar la opción follow de tail:

wget somesite.com/TheFile.jpeg --progress=bar:force 2>&1 | tail -f -n +6 

El +6 es eliminar las primeras 6 líneas. Puede ser diferente en su versión de wget o en su idioma.

Necesita usar --progress=bar:force de lo contrario, wget cambia al tipo dot.

El inconveniente es que la actualización es menos frecuente que con wget (parece cada 2 segundos). La opción --sleep-interval de tail parece ser solo para eso, pero no me cambió nada.

+0

¿sabe por qué cambia al tipo de punto? algún problema de tipo TERM? la fuerza funcionó para mí, ¡gracias! –

73

Uso:

wget http://somesite.com/TheFile.jpeg -q --show-progress 

-q - Desactivar la salida de Wget

--show-progress - wget Fuerza para mostrar la barra de progreso en cualquier nivel de detalle

+5

Para mí esto muestra 'wget: opción no reconocida '--show-progress''? ¿Sabes si esto solo está presente en las versiones de wget más nuevas? –

+7

@ UliKöhler [la bandera solo existe desde 1.16] (http://stackoverflow.com/a/32491843/1267663) – Whymarrh

10

La opción --show-progress, como se ha comentado en otras , es la mejor opción, pero está disponible solo desde GNU wget 1.16, ver Noteworthy changes in wget 1.16.

Para estar seguro, podemos comprobar primero si se admite --show-progress:

# set progress option accordingly 
wget --help | grep -q '\--show-progress' && \ 
    _PROGRESS_OPT="-q --show-progress" || _PROGRESS_OPT="" 

wget $_PROGRESS_OPT ... 

Tal vez sea hora de considerar simplemente usando curl.

0

Esto no es literalmente una respuesta, pero este fragmento también podría ser útil para algunos que vienen aquí, por ej. "Zenity wget GUI":

LANG=C wget -O /dev/null --progress=bar:force:noscroll --limit-rate 5k http://nightly.altlinux.org/sisyphus/ChangeLog 2>&1 | stdbuf -i0 -o0 -e0 tr '>' '\n' | stdbuf -i0 -o0 -e0 sed -rn 's/^.*\<([0-9]+)%\[.*$/\1/p' | zenity --progress --auto-close

Lo que era crucial para mí es stdbuf(1).

0

Aquí hay una solución que le mostrará un punto para cada archivo (o línea, para el caso). Es particularmente útil si está descargando con --recursive. Esto no detectará errores y puede estar un poco apagado si hay líneas adicionales, pero para el progreso general en muchos archivos es útil:

wget -r -nv https://example.com/files/ | \ 
    awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }' 
Cuestiones relacionadas