例えば:
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でその仕事をする必要があります。
次のフィルターを使用できます。
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
のシーケンスに依存します。この動作は実装に依存する場合があります。
つかいます:
wget http://somesite.com/TheFile.jpeg -q --show-progress
-q
-Wgetの出力をオフにする
--show-progress
-wgetにプログレスバーを任意の詳細度で表示させる
オプション --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
の使用を検討する時が来たのでしょう。
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秒ごとのように見えます)。 tail
の--sleep-interval
オプションはそのためだけのものであるようですが、私にとっては何も変わりませんでした。
次のフラグを使用して使用します。
wget -q --show-progress --progress=bar:force 2>&1
次の標準オプションを使用できます。
wget --progress=bar http://somesite.com/TheFile.jpeg
これは別の例であり、おそらくあなたを助けるでしょう
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)
です。