Как показать только прогресс-бар wget? - PullRequest
57 голосов
/ 14 января 2011

Например:

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, чтобы выполнить эту работу.

Ответы [ 10 ]

119 голосов
/ 05 апреля 2015

Использование:

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

-q - отключить вывод Wget

--show-progress - принудительно заставить wget отображать индикатор выполнения в любом многословии

23 голосов
/ 14 января 2011

Можно использовать следующий фильтр:

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, отправляемой непосредственно перед запуском индикатора выполнения.Это поведение может зависеть от реализации.

10 голосов
/ 10 сентября 2015

Опция --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.

10 голосов
/ 07 июня 2013

Вы можете использовать опцию follow tail:

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

+6 - удалить первые 6 строк.Он может отличаться в вашей версии wget или на вашем языке.

Вам необходимо использовать --progress=bar:force, иначе wget переключится на тип dot.

Недостатком является то, что обновлениереже, чем с wget (выглядит каждые 2 секунды).--sleep-interval вариант tail, кажется, предназначен именно для этого, но для меня это ничего не изменило.

4 голосов
/ 06 ноября 2012

Вы можете использовать стандартные опции:

wget --progress=bar http://somesite.com/TheFile.jpeg
3 голосов
/ 17 октября 2018

Используйте эти флаги:

wget  -q --show-progress --progress=bar:force 2>&1
2 голосов
/ 12 октября 2012

Это еще один пример, может быть, вам поможет

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"
}
0 голосов
/ 05 апреля 2017

Вот решение, которое покажет вам точку для каждого файла (или строку, если на то пошло). Это особенно полезно, если вы загружаете с --recursive. Это не приведет к ошибкам и может быть слегка отключено, если есть дополнительные строки, но для общего прогресса на многих файлах это полезно:

wget -r -nv https://example.com/files/ | \
    awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }'
0 голосов
/ 22 сентября 2015

Это не буквально ответ, но этот фрагмент также может быть полезен для некоторых, приезжающих сюда, например, "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).

0 голосов
/ 14 января 2011
curl -o pic.png http://somesite.com/pic.png

Показывать только информацию о прогрессе без болтовни URL / адреса.

...