Например:
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
Как я могу заставить его выглядеть так
downloading: TheFile.jpeg ...
25% [======> ] 614,424 173.62K/s ETA 00:14
Я знаю, что curl может это сделать, но мне нужно, чтобы wget выполнял эту работу.
wget -nv
является наиболее близким к тому, что вы собираетесь получить, и на самом деле он не отображает индикатор выполнения, а только однострочную сводку по завершении загрузки.curl
может загружать файлы и создавать простой индикатор выполнения:echo "downloading: $file ..." && curl --progress-bar --remote-name --location "$url"
Ответы:
Вы можете использовать следующий фильтр:
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 }
Применение:
$ 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]
Эта функция зависит от последовательности
0x0d0x0a0x0d0x0a0x0d
отправки непосредственно перед запуском индикатора выполнения. Такое поведение может зависеть от реализации.источник
%c
на,%s
чтобы исправить это:�
Использование:
-q
: Выключитьwget
вывод--show-progress
: Принудительноwget
отображать индикатор выполнения независимо от того, какой уровень детализации установлен наисточник
wget: unrecognized option '--show-progress'
? Вы знаете, присутствует ли это только в более новых версиях wget?--progress=bar:force:noscroll
вместе с-q
и--show-progress
. Это хорошо работает для Dockerfile в сборке.--progress=bar:force:noscroll
строк!Используйте эти флаги:
источник
force 2>&1
делать? Простоwget -q --show-progress --progress=bar
кажется, что для меня результат такой же.Вы можете использовать
follow
опциюtail
:+6
Является удаление первых 6 строк. Это может быть иначе в вашей версииwget
или вашего языка.Вам нужно использовать
--progress=bar:force
иначе wget переключает наdot
тип.Обратной стороной является то, что обновление происходит реже, чем с wget (похоже, каждые 2 секунды).
--sleep-interval
Вариант ,tail
кажется, имел в виду только для этого, но это ничего не изменило для меня.источник
wget somesite.com/TheFile.jpeg --progress=bar:force 2>&1 | tail -f -n +8
Этот вариант
--show-progress
, как указали другие, является лучшим вариантом, но он доступен только начиная с GNU wget 1.16 , см. Примечательные изменения в wget 1.16 .На всякий случай мы можем сначала проверить,
--show-progress
поддерживается ли:# set progress option accordingly wget --help | grep -q '\--show-progress' && \ _PROGRESS_OPT="-q --show-progress" || _PROGRESS_OPT="" wget $_PROGRESS_OPT ...
Может, пора подумать об использовании
curl
.источник
Можно использовать стандартные варианты:
источник
Это еще один пример, может вам поможет
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" }
источник
Вот решение, которое покажет вам точку для каждого файла (или строки, если на то пошло). Это особенно полезно, если вы загружаете файлы с расширением
--recursive
. Это не поможет отловить ошибки и может немного не работать, если есть лишние строки, но для общего прогресса с большим количеством файлов это полезно:wget -r -nv https://example.com/files/ | \ awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }'
источник
Это не буквально ответ, но этот фрагмент также может быть полезен для тех, кто приходит сюда, например, для "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
Для меня было решающим
stdbuf(1)
.источник