Por ejemplo:
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 hacer que se vea así?
downloading: TheFile.jpeg ...
25% [======> ] 614,424 173.62K/s ETA 00:14
Sé que curl puede hacer eso, sin embargo, necesito que wget haga ese trabajo.
wget -nv
es lo más cerca que va a estar, y en realidad no muestra una barra de progreso, solo un resumen de una línea cuando se completa la descarga.curl
puede descargar archivos y producir una barra de progreso simple:echo "downloading: $file ..." && curl --progress-bar --remote-name --location "$url"
Respuestas:
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 '%s' "$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
envío justo antes de que se inicie la barra de progreso. Este comportamiento puede depender de la implementación.fuente
%c
por%s
para corregir esto:�
Utilizar:
-q
: Apagawget
la salida--show-progress
: Fuerzawget
para mostrar la barra de progreso sin importar cuál sea su nivel de verbosidadfuente
wget: unrecognized option '--show-progress'
? ¿Sabe si esto solo está presente en las versiones más recientes de wget?--progress=bar:force:noscroll
junto con-q
y--show-progress
. Esto funciona muy bien para un Dockerfile dentro de una compilación.--progress=bar:force:noscroll
detener la generación de nuevas líneas!Úselo usando estas banderas:
fuente
force 2>&1
? Simplementewget -q --show-progress --progress=bar
parece ceder a la misma salida para mí.Puede utilizar la
follow
opción detail
:El
+6
es borrar las primeras 6 líneas. Puede ser diferente en su versiónwget
o en su idioma.--progress=bar:force
Debe usar, de lo contrario, wget cambia aldot
tipo.La desventaja es que la actualización es menos frecuente que con wget (parece cada 2 segundos). La
--sleep-interval
opción detail
parece ser solo para eso, pero no cambió nada para mí.fuente
wget somesite.com/TheFile.jpeg --progress=bar:force 2>&1 | tail -f -n +8
La opción
--show-progress
, como han señalado otros, es la mejor opción, pero está disponible solo desde GNU wget 1.16 , consulte Cambios notables en wget 1.16 .Para estar seguros, primero podemos verificar si
--show-progress
es compatible:# 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 solo usar
curl
.fuente
Puede utilizar opciones estándar:
fuente
Este es otro ejemplo, tal vez te ayude
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" }
fuente
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 ligeramente 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" }'
fuente
Esto no es literalmente una respuesta, pero este fragmento también podría ser útil para algunos que vengan aquí, por ejemplo, "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 fue crucial para mí es
stdbuf(1)
.fuente