Wget é silencioso, mas exibe mensagens de erro

10

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

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

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

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

    
por phihag 03.05.2012 / 16:18

4 respostas

4

Lame hack, 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 [success], os | curtos-circuitos irão imprimir os valores do log de erros)

    
por 03.05.2012 / 16:26
4

Experimente curl :

curl -fsS $url -o $file

Versão longa:

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

Usuários do GNOME podem experimentar o Gvfs:

gvfs-cp $url $file
    
por 03.05.2012 / 17:45
1

Como atualmente todo o output do wget vai para o stderr, parece que para resolver isso 'a maneira elegante' você teria que corrigir a origem do wget.

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

Há um bug aberto sobre esse link , e também há discussões mais antigas. Aqui está um patch sugerido link e aqui há uma resposta de Hrvoje Niksic sobre isso < href="http://www.mail-archive.com/wget%40sunsite.dk/msg03330.html"> link .

Além disso, há, é claro, a boa solução que você propôs em um comentário à solução menos elegante da Foon.

    
por 03.05.2012 / 16:57
0

Você também pode enviar a saída para grep e 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+\]$"
    
por 03.05.2012 / 16:35

Tags