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.