Wget è silenzioso, ma visualizza messaggi di errore


10

Voglio scaricare un file con Wget , ma secondo la consueta filosofia UNIX, non voglio che produca nulla se il download ha esito positivo. Tuttavia, se il download non riesce, voglio un messaggio di errore.

L' -qopzione elimina tutto l'output, inclusi i messaggi di errore. Se -nvinvece includo l' opzione, Wget stampa ancora (su stderr):

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

Come posso rimuovere anche quell'output, ma ottenere comunque messaggi di errore?

Risposte:


4

Hack zoppo se non riesci a ottenere una risposta migliore:

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

(Il 2> /tmp/err.log reindirizza stderr su un file tmp; se wget restituisce 0 [successo], i cortocircuiti || altrimenti stampa i valori del registro errori)


+1 Ho perso che tutto l'output stava per essere standard; Ho eliminato la mia risposta di reindirizzamento di stdout a / dev / null.
Chepner,

5
Funziona, ma è zoppo . error_log=$(wget -nv example.net 2>&1) || echo $error_logè una soluzione più elegante, ma comunque maldestra.
phihag,

4

Prova curlinvece:

curl -fsS $url -o $file

Versione lunga:

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

Gli utenti GNOME possono provare Gvfs:

gvfs-cp $url $file

1
Sfortunatamente, curl non è preinstallato su tutti i sistemi debian.
phihag,

perché aggiungere --fail? non avrebbe senso trattare gli errori HTTP come qualcosa su cui vorresti andare a stderr?
Gilad Mayani,

Questo è esattamente ciò che la combinazione di --faile --show-errorfa.
user1686

1

Poiché attualmente tutto l'output di wget va a stderr, sembra che per risolvere questo "modo elegante" dovresti correggere la fonte di wget.

Il design della sorgente di wget determina la differenza di livello di verbosità tra i messaggi, piuttosto che una semplice suddivisione tra errore e non messaggio di errore.

C'è un bug aperto su questo http://savannah.gnu.org/bugs/?33839 , e c'è anche qualche discussione più vecchia. Ecco una patch suggerita http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html e qui c'è una risposta di Hrvoje Niksic su questo http://www.mail-archive.com/wget % 40sunsite.dk / msg03330.html .

Oltre a questo, c'è ovviamente la buona soluzione che hai proposto in un commento alla soluzione meno elegante di Foon.


0

È inoltre possibile reindirizzare l'output grepe filtrare il messaggio di successo.

Questo dovrebbe funzionare:

wget ... -nv 2>&1 | grep -Pv "^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d URL:.*\[\d+\] -> ".*" \[\d+\]$"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.