Как показать только индикатор выполнения wget?
Например:
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 выполнять эту работу.
Ответы
Ответ 1
Вы можете использовать следующий фильтр:
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
, отправляемой непосредственно перед 0x0d0x0a0x0d0x0a0x0d
индикатора выполнения. Это поведение может зависеть от реализации.
Ответ 2
Использование:
wget http://somesite.com/TheFile.jpeg -q --show-progress
-q
- Выключить вывод Wget
--show-progress
- заставить wget отображать индикатор выполнения в любой многословности
Ответ 3
Опция --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
.
Ответ 4
Вы можете использовать опцию 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
, по-видимому, предназначена только для этого, но для меня это ничего не меняло.
Ответ 5
Вы можете использовать стандартные опции:
wget --progress=bar http://somesite.com/TheFile.jpeg
Ответ 6
Это еще один пример, возможно, поможет вам
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"
}
Ответ 7
Это не буквальный ответ, но этот фрагмент также может быть полезен для некоторых, приходящих сюда, например. "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)
.
Ответ 8
Вот решение, которое покажет вам точку для каждого файла (или строки, если на то пошло). Это особенно полезно, если вы загружаете с помощью --recursive
. Это не приведет к ошибкам и может быть слегка отключено, если есть дополнительные строки, но для общего прогресса в большом количестве файлов это полезно:
wget -r -nv https://example.com/files/ | \
awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }'
Ответ 9
Используйте с помощью этих флагов:
wget -q --show-progress --progress=bar:force 2>&1
Ответ 10
curl -o pic.png http://somesite.com/pic.png
Покажите мне информацию о ходе работы без обращения к URL/адресу.