如何只显示wget进度条?

By admin at 286.3天前 • 766点击

例如:

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来完成这项工作。
9 个回复
xid 2018-10-25

使用:

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

-q - 关闭Wget的输出 --show-progress - 强制wget以任何详细程度显示进度条
umodi 2018-10-25

这是一个解决方案,它将为每个文件(或行)显示一个点。如果您使用--recursive下载,它尤其有用。这不会捕获错误,如果有额外的行可能稍微关闭,但是对于许多文件的一般进展它是有帮助的:

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

ksit 2018-10-25

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

只显示没有URL /地址聊天的进度信息。
rut 2018-10-25

您可以使用tail的follow选项:

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选项似乎只是为了这个,但它并没有改变任何东西。
uid 2018-10-25

这是另一个例子,也许会对你有所帮助

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

qut 2018-10-25

这不是一个答案,但这段代码也可能对某些人来说很有帮助。
“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)。

det 2018-10-25

您可以使用以下过滤器:

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序列。此行为可能取决于实现。
ket 2018-10-25

您可以使用标准选项:

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

znemo 2018-10-25

正如其他人所指出的,选项--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了。

目前尚无回复
该帖评论已关闭