Wget est silencieux, mais il affiche des messages d'erreur

10

Je veux télécharger un fichier avec Wget , mais selon la philosophie UNIX habituelle, je ne veux pas qu'il génère quoi que ce soit si le téléchargement réussit. Cependant, si le téléchargement échoue, je veux un message d'erreur.

L' -qoption supprime toutes les sorties, y compris les messages d'erreur. Si j'inclus l' -nvoption à la place, Wget imprime toujours (sur stderr):

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

Comment puis-je supprimer même cette sortie, mais toujours recevoir des messages d'erreur?

phihag
la source

Réponses:

4

Lame hack si vous ne pouvez pas obtenir une meilleure réponse:

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

(Le 2> /tmp/err.log redirige stderr vers un fichier tmp; si wget renvoie 0 [succès], les courts-circuits || sinon il affichera les valeurs du journal des erreurs)

Foon
la source
+1 J'ai raté que toute la sortie allait vers stderr; J'ai supprimé ma réponse de simplement rediriger stdout vers / dev / null.
chepner
5
Cela fonctionne, mais c'est boiteux . error_log=$(wget -nv example.net 2>&1) || echo $error_logest une solution plus élégante, mais toujours maladroite.
phihag
4

Essayez curlplutôt:

curl -fsS $url -o $file

Version longue:

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

Les utilisateurs de GNOME peuvent essayer Gvfs:

gvfs-cp $url $file
user1686
la source
1
Malheureusement, curl n'est pas préinstallé sur tous les systèmes Debian.
phihag
pourquoi ajouter --fail? ne serait-il pas logique de traiter les erreurs HTTP comme quelque chose que vous voudriez voir sur stderr?
gilad mayani
C'est précisément ce que la combinaison de --failet --show-errorfait.
user1686
1

Étant donné qu'actuellement, toutes les sorties wget sont envoyées à stderr, il semble que pour résoudre ce problème «de manière élégante», vous devez corriger la source wget.

La conception de la source wget dicte la différence de niveau de verbosité entre les messages, plutôt qu'une simple répartition entre les messages d'erreur et non d'erreur.

Il y a un bogue ouvert à ce sujet http://savannah.gnu.org/bugs/?33839 , et il y a aussi des discussions plus anciennes. Voici un correctif suggéré http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html et ici il y a une réponse de Hrvoje Niksic à ce sujet http://www.mail-archive.com/wget % 40sunsite.dk / msg03330.html .

À part cela, il y a bien sûr la bonne solution que vous avez proposée dans un commentaire à la solution moins élégante de Foon.

amotzg
la source
0

Vous pouvez également diriger la sortie vers grepet filtrer le message de réussite.

Cela devrait fonctionner:

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