如何只显示wget进度条? [已关闭]

问题描述 投票:0回答:9

例如:

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 来完成这项工作。

linux bash wget sh
9个回答
242
投票

用途:

wget http://somesite.com/TheFile.jpeg -q --show-progress
  • -q
    :关闭
    wget
    的输出

  • --show-progress
    :强制
    wget
    显示进度条,无论其详细程度设置为多少


35
投票

使用这些标志运行:

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

32
投票

您可以使用以下过滤器:

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
。此行为可能依赖于实现。


13
投票

您可以使用

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-interval
tail
选项似乎只是为了这个目的,但它对我来说没有任何改变。


13
投票

选项

--show-progress
,正如其他人指出的那样,是最好的选择,但它仅自 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


4
投票

您可以使用标准选项:

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

2
投票

这是另一个例子:

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

0
投票

这里有一个解决方案,它将为每个文件(或行,就此而言)显示一个点。如果您使用

--recursive
下载,它特别有用。这不会捕获错误,如果有额外的行,可能会略有偏差,但对于许多文件的总体进展来说,这是有帮助的:

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

-4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.