How to show wget progress bar only?

前端 未结 9 904
情歌与酒
情歌与酒 2021-01-30 06:19

For example:

wget http://somesite.com/TheFile.jpeg

downloading: TheFile.tar.gz ...
--09:30:42--  http://somesite.com/TheFile.jpeg
                   


        
相关标签:
9条回答
  • 2021-01-30 06:38

    Here is a solution that will show you a dot for each file (or line, for that matter). It is particularly useful if you are downloading with --recursive. This won't catch errors and may be slightly off if there are extra lines, but for general progress on a lot of files it is helpful:

    wget -r -nv https://example.com/files/ | \
        awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }'
    
    0 讨论(0)
  • 2021-01-30 06:45

    You can use the following filter:

    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
    }
    

    Usage:

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

    This function depends on a sequence of 0x0d0x0a0x0d0x0a0x0d being sent right before the progress bar is started. This behavior may be implementation dependent.

    0 讨论(0)
  • 2021-01-30 06:46

    You can use standard options:

    wget --progress=bar http://somesite.com/TheFile.jpeg
    
    0 讨论(0)
  • 2021-01-30 06:47

    This is another exemple, maybe will help you

    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 讨论(0)
  • 2021-01-30 06:49

    This is not literally an answer but this snippet might also be helpful to some coming here for e.g. "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

    What was crucial for me is stdbuf(1).

    0 讨论(0)
  • 2021-01-30 06:51

    You can use the follow option of tail:

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

    The +6 is to delete the first 6 lines. It may be different on your version of wget or your language.

    You need to use --progress=bar:force otherwise wget switches to the dot type.

    The downside is that the refreshing is less frequent than with wget (looks like every 2 seconds). The --sleep-interval option of tail seems to be meant just for that, but it didn't change anything for me.

    0 讨论(0)
提交回复
热议问题