2011-01-13 4 views
39

Например:Как показать только индикатор выполнения 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 

Я знаю, скручивание может сделать это, однако, мне нужно, чтобы Wget сделать эту работу ,

+1

Я не думаю, что это возможно без написания сценария для синтаксического анализа Выход wget. 'wget -nv' близок к тому, что вы собираетесь получить, и на самом деле он не отображает индикатор выполнения, а всего лишь однострочное резюме при завершении загрузки. – cdhowie

ответ

18

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

progressfilt() 
{ 
    local flag=false c count cr=$'\r' nl=$'\n' 
    while IFS='' read -d '' -rn 1 c 
    do 
     if $flag 
     then 
      printf '%c' "$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 посылается непосредственно перед запуском прогресс бар. Такое поведение может быть зависимым от реализации.

-4
curl -o pic.png http://somesite.com/pic.png 

Покажите мне информацию о ходе работы без обращения к URL/адресу.

+2

Он сказал довольно конкретно, что он не хотел использовать 'curl' –

2

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

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" 
} 
4

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

wget --progress=bar http://somesite.com/TheFile.jpeg 
+0

Я не о каких-то других дистрибутивах, но это определенно не то, о чем попросил OP, по крайней мере, на Ubuntu. I.e., он по-прежнему показывает другую информацию, но OP запросил только «индикатор выполнения» ... –

6

Вы можете использовать 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-intervaltail, по-видимому, предназначен только для этого, но это ничего не изменило для меня.

+0

знаете ли вы, почему он переключается на точечный тип? некоторые проблемы типа TERM? сила работала для меня - спасибо! –

73

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

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

-q - Выключите выход Wget в

--show-progress - Force Wget, чтобы отобразить индикатор выполнения в любом многословие

+5

Для меня это показывает 'wget: unrecognized option '--show-progress''? Знаете ли вы, что это только в новых версиях wget? –

+7

@ UliKöhler [флаг существует только с 1.16] (http://stackoverflow.com/a/32491843/1267663) – Whymarrh

10

Опция --show-progress, как указывалось другими , это лучший вариант, но он доступен только с GNU wget 1.16, см. Noteworthy changes in 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.

0

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

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

wget -r -nv https://example.com/files/ | \ 
    awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }' 

 Смежные вопросы

  • Нет связанных вопросов^_^