webdevqa.jp.net

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でその仕事をする必要があります。

59
Flan Alflani

次のフィルターを使用できます。

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のシーケンスに依存します。この動作は実装に依存する場合があります。

24

つかいます:

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

-q-Wgetの出力をオフにする

--show-progress-wgetにプログレスバーを任意の詳細度で表示させる

124
Lord Bo

オプション --show-progressは、他の人が指摘したように、最良のオプションですが、GNU wget1.16wget 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
ryenus

followtailオプションを使用できます。

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

+6は、最初の6行を削除します。 wgetのバージョンまたは言語によって異なる場合があります。

--progress=bar:forceを使用する必要があります。そうでない場合、wgetはdotタイプに切り替わります。

欠点は、wgetの場合よりもリフレッシュの頻度が少ないことです(2秒ごとのように見えます)。 tail--sleep-intervalオプションはそのためだけのものであるようですが、私にとっては何も変わりませんでした。

10
Metaxal

次のフラグを使用して使用します。

wget  -q --show-progress --progress=bar:force 2>&1
6
Amir Khalili

次の標準オプションを使用できます。

wget --progress=bar http://somesite.com/TheFile.jpeg
4
slva

これは別の例であり、おそらくあなたを助けるでしょう

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"
}
2
user870774

以下に、各ファイル(または行)のドットを表示するソリューションを示します。 --recursiveでダウンロードする場合に特に便利です。これはエラーをキャッチせず、余分な行がある場合はわずかにオフになる可能性がありますが、多くのファイルの一般的な進行には役立ちます:

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

これは文字通り答えではありませんが、このスニペットは、たとえば「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