wget 진행률 표시 줄 만 표시하는 방법은 무엇입니까?


81

예를 들면 :

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

나는 컬이 그렇게 할 수 있다는 것을 알고 있지만, 그 일을하려면 wget이 필요합니다.


1
wget의 출력을 구문 분석하는 스크립트를 작성하지 않고는 이것이 가능하지 않다고 생각합니다. wget -nv가장 가까운 위치에 있으며 실제로 진행률 표시 줄이 표시되지 않고 다운로드가 완료 될 때 한 줄 요약 만 표시됩니다.
cdhowie

3
wget을 --progress = 바 : 힘 : noscroll
레오 갈루치

2
curl파일을 다운로드하고 간단한 진행률 표시 줄을 생성 할 수 있습니다.echo "downloading: $file ..." && curl --progress-bar --remote-name --location "$url"
curusarn 19

답변:


26

다음 필터를 사용할 수 있습니다.

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 버전 1.16 이상이 없다면 유용합니다!
A-312

1
숯불 인코딩으로 버그를 방지하기 위해, 당신은 교체해야 %c으로 %s이 수정
A-312

@HorsSujet : 내가 보는 것은 유니 코드 왼쪽과 오른쪽 작은 따옴표에서 가져온 것입니다. 내 대답을 수정하여 변경하겠습니다. 신고 해 주셔서 감사합니다.
데니스 윌리엄슨

두 번째 함수로 코드를 개선 할 수도 있습니다. 더 읽기 쉽습니다
A-312

나는 그것이 전체 스크립트에서 유용하다는 데 동의하지만 대답에 필요하다고 생각하지 않습니다.
Dennis Williamson

184

사용하다:

wget http://somesite.com/TheFile.jpeg -q --show-progress
  • -q: wget출력 끄기

  • --show-progress: wget설정 한 상세 수준에 관계없이 진행률 표시 줄을 강제 로 표시합니다.


11
나를 위해 이것은 쇼 wget: unrecognized option '--show-progress'? 이것이 최신 wget 버전에만 존재하는지 알고 있습니까?
Uli Köhler


12
버전간에 약간의 차이가있을 수 있지만, 광고 된대로 작동하게하려면 버전 1.19의 경우 다음 옵션도 추가해야합니다. --progress=bar:force:noscroll, -q--show-progress. 이것은 빌드 내의 Dockerfile에서 잘 작동합니다.
YoYo

1
@YoYo가 언급했듯이 --progress=bar:force:noscroll개행 문자 생성을 중지하는 것을 잊지 마십시오 !
Brent Faust

21

다음 플래그를 사용하여 사용하십시오.

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

최고의 한 줄. 나는 그것이 왜 선택된 대답이 아닌지 이해하지 못합니다.
Salamandar

무엇을 force 2>&1합니까? wget -q --show-progress --progress=bar나에게 동일한 결과를 내는 것 같습니다.
MBT

이것이 승자입니다. 스택 오버플로의 버그로 최고 답변이 아닙니다.
mmla

@ MBT : "2> & 1"은 stderr (일반적으로 오류 및 로그 메시지를 의미 함)와 stdout (일반적으로 실제 결과를 의미 함) 출력을 결합합니다. 여기에서는 불필요하다고 생각하지만 사람들이 프로세스의 전체 출력 (결과 및 오류 메시지)을 동일한 대상으로 리디렉션하려고 할 때 자주 사용됩니다
jov14

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그저 의미 하는 것 같지만 저에게는 아무것도 바뀌지 않았습니다.


왜 도트 타입으로 바뀌는 지 아십니까? 일부 기간 유형 문제? 힘이 나를 위해 일했습니다-감사합니다!
Neil McGill

꼬리 값이 "8"인 대상 파일 이름없이 진행률 표시 줄 만 표시하는 데 사용합니다. wget somesite.com/TheFile.jpeg --progress=bar:force 2>&1 | tail -f -n +8
MS Arun

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

나는 다른 배포판에 대해서는 아니지만 적어도 Ubuntu에서 OP가 요구 한 것은 아닙니다. 즉, 여전히 다른 정보를 표시하지만 OP는 "진행률 표시 줄 만"을 요청했습니다 ...
Dee'Kej

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

-3

이것은 말 그대로 대답은 아니지만이 스 니펫은 "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).


2
이 긴 줄이 무엇을하는지 설명해 주시겠습니까? 이것이 "말 그대로 대답이 아님"이라고 이미 언급했다면, 그 줄은 질문과 어떤 관련이 있습니까?
Nico Haase

이것은 잠재적 인 검색 방향과 관련이 있습니다. 제가 말한 것입니다. 명령 줄은 인수와 함께 "C"로케일에서 wget을 실행하여 추가 처리 (I / O 버퍼링이 꺼진 상태)에 적합한 방식으로 진행률을 zenity의 진행률 표시 줄에 출력하도록합니다. 예를 들어, 다운로드 도우미.
Michael Shigorin 19 년

코멘트 섹션이 아닌 답변 자체에 모든 설명을 추가하십시오
Nico Haase

주어진 명령 줄에서 모든 설명을 얻을 수없는 사람들은 실제로 그것을 필요로하지 않습니다. 그들은 많이 생각하지 않고 복사-붙여 넣기를하거나 그냥 모두 건너 뛸 것입니다. 그리고 할 수있는 사람들은 나를 통역사로 필요로하지 않습니다. 이는 커밋 diff 및 커밋 메시지와 같습니다. 원인과 의도가 아니라 후자 내에서 전자를 반복 할 필요가 없습니다. 어리석은 일을 :-) 할 사람들을 요청하지 마십시오
마이클 Shigorin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.