O Wget é silencioso, mas exibe mensagens de erro

10

Quero baixar um arquivo com o Wget , mas, de acordo com a filosofia usual do UNIX, não quero que ele produza nada se o download for bem-sucedido. No entanto, se o download falhar, quero uma mensagem de erro.

A -qopção suprime toda a saída, incluindo mensagens de erro. Se eu incluir a -nvopção, o Wget ainda imprime (no stderr):

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

Como posso remover até essa saída, mas ainda receber mensagens de erro?

phihag
fonte

Respostas:

4

Hack coxo se você não conseguir uma resposta melhor:

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

(O 2> /tmp/err.log redireciona o stderr para um arquivo tmp; se o wget retornar 0 [sucesso], os || curtos-circuitos, caso contrário, imprimirá os valores do log de erros)

Foon
fonte
+1 Perdi que toda a saída estava indo para stderr; Eu apaguei minha resposta de apenas redirecionar stdout para / dev / null.
Chepner #
5
Isso funciona, mas é coxo . error_log=$(wget -nv example.net 2>&1) || echo $error_logé uma solução mais elegante, mas ainda desajeitada.
Phihag
4

Tente em curlvez disso:

curl -fsS $url -o $file

Versão longa:

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

Usuários do GNOME podem tentar Gvfs:

gvfs-cp $url $file
user1686
fonte
1
Infelizmente, o curl não está pré-instalado em todos os sistemas debian.
Phihag
por que adicionar --fail? não faria sentido tratar os erros HTTP como algo que você gostaria de acessar no stderr?
gilad Mayani
É exatamente isso que a combinação de --faile --show-errorfaz.
user1686
1

Como atualmente toda a saída do wget vai para o stderr, parece que para resolver isso 'da maneira elegante' você teria que corrigir a fonte do wget.

O design da fonte wget determina a diferença no nível de verbosidade entre as mensagens, em vez de uma simples divisão entre mensagem de erro e não de mensagem de erro.

Há um erro em aberto sobre este http://savannah.gnu.org/bugs/?33839 , e também há algumas discussões mais antigas. Aqui está um patch sugerido http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html e aqui há uma resposta de Hrvoje Niksic sobre este http://www.mail-archive.com/wget % 40sunsite.dk / msg03330.html .

Fora isso, é claro que há a boa solução que você propôs em um comentário à solução menos elegante de Foon.

amotzg
fonte
0

Você também pode canalizar a saída grepe filtrar a mensagem de sucesso.

Isso deve funcionar:

wget ... -nv 2>&1 | grep -Pv "^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d URL:.*\[\d+\] -> ".*" \[\d+\]$"
Dennis
fonte