Na przykład:
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
Jak mogę sprawić, żeby wyglądało to tak
downloading: TheFile.jpeg ...
25% [======> ] 614,424 173.62K/s ETA 00:14
Wiem, że Curl może to zrobić, ale muszę zmusić Wget do wykonania tej pracy.
wget -nv
jest najbliższym, jaki masz zamiar uzyskać, i tak naprawdę nie wyświetla paska postępu, a tylko jednowierszowe podsumowanie po zakończeniu pobierania.curl
może pobierać pliki i tworzyć prosty pasek postępu:echo "downloading: $file ..." && curl --progress-bar --remote-name --location "$url"
Odpowiedzi:
Możesz użyć następującego filtra:
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 }
Stosowanie:
$ 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]
Ta funkcja zależy od kolejności
0x0d0x0a0x0d0x0a0x0d
wysyłania tuż przed uruchomieniem paska postępu. To zachowanie może zależeć od implementacji.źródło
%c
je na,%s
aby to naprawić:�
Posługiwać się:
-q
: Wyłączwget
wyjście--show-progress
: Wymuszawget
wyświetlanie paska postępu bez względu na ustawiony poziom szczegółowościźródło
wget: unrecognized option '--show-progress'
? Czy wiesz, czy jest to obecne tylko w nowszych wersjach wget?--progress=bar:force:noscroll
wraz z-q
i--show-progress
. Działa to dobrze w przypadku pliku Dockerfile w kompilacji.--progress=bar:force:noscroll
zatrzymać generowania nowych linii!Użyj używając tych flag:
źródło
force 2>&1
?wget -q --show-progress --progress=bar
Wydaje mi się, że po prostu ustępuje tej samej produkcji.Możesz skorzystać z
follow
opcjitail
:Służy
+6
do usunięcia pierwszych 6 wierszy. Może się różnić w Twojej wersjiwget
lub języku.W
--progress=bar:force
przeciwnym razie wget przełącza się nadot
typ.Wadą jest to, że odświeżanie jest rzadsze niż w przypadku wget (wygląda jak co 2 sekundy).
--sleep-interval
Opcjatail
wydaje się być przeznaczona tylko dla tego, ale to nic nie zmienia dla mnie.źródło
wget somesite.com/TheFile.jpeg --progress=bar:force 2>&1 | tail -f -n +8
Opcja
--show-progress
, jak wskazali inni, jest najlepszą opcją, ale jest dostępna tylko od wersji GNU wget 1.16 , zobacz Godne uwagi zmiany w wget 1.16 .Dla bezpieczeństwa możemy najpierw sprawdzić, czy
--show-progress
jest obsługiwany:# set progress option accordingly wget --help | grep -q '\--show-progress' && \ _PROGRESS_OPT="-q --show-progress" || _PROGRESS_OPT="" wget $_PROGRESS_OPT ...
Może nadszedł czas, aby rozważyć użycie
curl
.źródło
Możesz użyć standardowych opcji:
źródło
To kolejny przykład, może ci pomoże
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" }
źródło
Oto rozwiązanie, które pokaże kropkę dla każdego pliku (lub linii, jeśli o to chodzi). Jest to szczególnie przydatne, jeśli pobierasz z
--recursive
. Nie wykryje to błędów i może być nieco wyłączone, jeśli są dodatkowe wiersze, ale w przypadku ogólnego postępu w wielu plikach jest pomocne:wget -r -nv https://example.com/files/ | \ awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }'
źródło
To nie jest dosłowna odpowiedź, ale ten fragment może być również pomocny dla osób, które tu przyjeżdżają, np. „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
To, co było dla mnie kluczowe, to
stdbuf(1)
.źródło