如何只显示wget进度条?

例如:

wget TheFile.jpeg

 downloading: TheFile.tar.gz ... --09:30:42-- 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来完成这项工作。

您可以使用以下filter:

 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 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] 

此function取决于在进度条启动之前发送的0x0d0x0a0x0d0x0a0x0d序列。 此行为可能是实现相关的。

使用:

 wget TheFile.jpeg -q --show-progress 

-q – closuresWget的输出

--show-progress – 强制wget以任何详细程度显示进度条

正如其他人指出的那样,选项--show-progress是最好的select,但它只能在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

您可以使用tailfollow选项:

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

+6是删除前6行。 这可能是在您的wget版本或您的语言不同。

你需要使用--progress=bar:force否则wget切换dottypes。

缺点是刷新不如wget更频繁(看起来像每2秒)。 tail--sleep-interval选项似乎只是为了这个目的,但是它并没有改变任何东西。

您可以使用标准选项:

 wget --progress=bar 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" } 

这不是字面上的答案,但这个片段也可能有助于一些来这里例如“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)

这是一个解决scheme,将显示每个文件(或线,就此而言)点。 如果使用--recursive进行下载,这将特别有用。 这不会发现错误,如果有额外的行,可能会稍微closures,但对于大量文件的一般进度,这是有帮助的:

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

只显示我没有url/地址喋喋不休的进度信息。