Wget은 자동이지만 오류 메시지를 표시합니다.


11

Wget 으로 파일을 다운로드하고 싶지만 일반적인 UNIX 철학에 따라 다운로드가 성공하면 아무것도 출력하지 않으려 고 합니다. 그러나 다운로드가 실패하면 오류 메시지가 표시됩니다.

이 -q옵션은 오류 메시지를 포함한 모든 출력을 억제합니다. -nv대신 옵션을 포함하면 Wget은 여전히 ​​stderr에 인쇄합니다.

2012-05-03 16:17:05 URL:http://example.net/ [2966] -> "index.html" [1]

해당 출력을 제거하지만 여전히 오류 메시지가 표시되는 방법은 무엇입니까?

답변:


5

curl대신 시도하십시오 :

curl -fsS $url -o $file

긴 버전 :

curl --fail --silent --show-error $url --output $file

그놈 사용자는 Gvfs를 시도 할 수 있습니다 :

gvfs-cp $url $file

1
불행히도 curl은 모든 데비안 시스템에 사전 설치되어 있지 않습니다.
— phihag

왜 추가 --fail합니까? HTTP 오류를 stderr로 가고 싶은 것으로 취급하는 것이 합리적이지 않습니까?
— gilad mayani

이것이 바로 --fail와 의 조합입니다 --show-error.
— user1686 년

4

더 나은 답변을 얻을 수 없으면 해킹 해킹 :

wget {url} 2>/tmp/err.log || cat /tmp/err.log; rm /tmp/err.log

(2> /tmp/err.log는 stderr를 tmp 파일로 경로 재 지정합니다. wget이 0을 성공하면 || 단락이 발생하고 그렇지 않으면 오류 로그 값이 인쇄됩니다)


+1 모든 출력이 stderr로가는 것을 놓쳤습니다. stdout을 / dev / null로 리디렉션하는 대답을 삭제했습니다.
— chepner

5
그것은 효과가 있지만 절름발이 입니다. error_log=$(wget -nv example.net 2>&1) || echo $error_log더 우아한 솔루션이지만 여전히 서투른입니다.
— phihag

1

현재 모든 wget 출력이 stderr로 이동하기 때문에이 '우아한 방법'을 해결하려면 wget 소스를 패치해야합니다.

wget 소스 디자인은 오류 메시지가 아니라 오류 메시지가 아닌 간단한 메시지 분할이 아니라 메시지 간의 상세 수준 차이를 나타냅니다.

이 http://savannah.gnu.org/bugs/?33839 에 대한 공개 버그가 있으며 오래된 토론도 있습니다. 다음은 제안 된 패치 http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html 이며 여기에 대한 http://www.mail-archive.com/wget에 대한 Hrvoje Niksic의 답변이 있습니다 . % 40sunsite.dk / msg03330.html .

그 외에도 Foon의 덜 우아한 솔루션에 대한 의견에서 제안한 좋은 솔루션이 있습니다.


0

출력을 파이프 grep하여 성공 메시지를 필터링 할 수도 있습니다 .

이것은 작동해야합니다 :

wget ... -nv 2>&1 | grep -Pv "^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d URL:.*\[\d+\] -> ".*" \[\d+\]$"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.