wget pour imprimer les erreurs, mais rien d'autre

27

Comment puis-je avoir des erreurs d'impression wget, mais rien d'autre?

Dans le comportement par défaut, il affiche une barre de progression et beaucoup de choses.

Dans la version --no-verbose imprime toujours une ligne par fichier téléchargé, ce que je ne veux pas.

L'option --quiet le rend totalement silencieux, même en cas d'erreur, il n'imprime rien.

Existe-t-il un mode dans lequel il imprime des erreurs, mais rien d'autre?

pupeno
la source

Réponses:

17

Il y a de très bonnes réponses à cette question, assurez-vous de les vérifier, mais ce que j'ai fait est le suivant:

wget [wget options] 2>&1 | grep -i "failed\|error"
pupeno
la source
C'était la seule réponse qui a fonctionné pour moi avec 16.04 ubuntu bash.
Ligemer
17

Utilisez curl, inutile de deviner à quoi ressemblera chaque erreur.

[wizard@laptop ~] curl -s -S http://www.google.coccm/ > /dev/null && echo "TRUE"
curl: (6) Couldn't resolve host 'www.google.coccm'
[wizard@laptop ~]$ curl -s -S http://www.google.com/ > /dev/null && echo "TRUE"
TRUE

-s / - silencieux

Silent mode. Don’t show progress meter or error messages. Makes Curl mute.

-S / - show-error

When used with -s it makes curl show error message if it fails.

Et si vous avez besoin de stderr sur stdout pour une raison quelconque.

curl -s -S http://www.google.coccm/  2>&1 1> /dev/null
reconbot
la source
1
Malheureusement, cela ne gère pas les erreurs HTTP typiques (par exemple, les erreurs 404 sont supprimées de cette façon), contrairement à la méthode hacky wget.
process91
Downvote: Bien que votre suggestion soit plausible, elle ne répond pas à la question.
Stephan Richter
Ajouter -f / - ne parvient pas à afficher un message d'erreur si le serveur renvoie un code d'erreur (par exemple 404)
Hontvári Levente
Cela pourrait être une excellente réponse si, la question portait sur curl, ou si curl avait la parité des fonctionnalités avec wget. Malheureusement, ce n'est pas le cas non plus.
dfc
4

Je ne vois pas d'option pour cela. Avez-vous besoin de savoir quelle est l'erreur, ou tout simplement si elle s'est produite? Si vous avez juste besoin de savoir s'il y a eu une erreur, vous pouvez utiliser l'état de sortie.

if ! wget -o /dev/null www.google.com/flasfsdfsdf; then
    echo 'Oops!'
fi

Ou peut-être:

if ! wget -o logfile www.google.com/flasfsdfsdf; then
    cat logfile
fi

Et vous pouvez changer le chat en une commande grep si vous voulez vous faire plaisir ...

Kyle Brandt
la source
3
Un moyen plus simple: wget -o logfile <url> || cat logfile
kolypto
La manière la plus simple est pire car vous voulez probablement quitter ou faire quelque chose de différent en cas d'erreur, en plus d'afficher le message d'erreur.
Sam Watkins
2

Redirigez la sortie standard vers /dev/null, mais conservez la sortie d'erreur dans votre choix de shell.

En bash ce serait:

wget [wget options] > /dev/null

Edit: sewget comporte donc mal. Si toutes les erreurs contiennent le mot "erreur", vous pouvezgrep

wget [wget options] 2>&1 | grep -i "error"
Ben S
la source
wget semble tout envoyer à stderr.
pupeno
J'ai ajouté une autre option en utilisant grepuniquement les erreurs de sortie
Ben S
stderrne passe pas par le tuyau sans aide.
pause jusqu'à nouvel ordre.
1
Au final, j'ai utilisé wget [options wget] 2> & 1 | grep -i "échoué \ | erreur"
pupeno
1

Depuis la wgetsortie de tous les messages stderr, vous devez utiliser la redirection avant de pouvoir le diriger vers grep:

wget [options] 2>&1 | grep "^wget:"

Cela suppose que wgetcommence ses lignes d'erreur par "wget:".

En pause jusqu'à nouvel ordre.
la source
1
OUT=`wget --no-verbose -O /tmp/a http://example.com/ 2>&1` || echo $OUT

travaux. Mais il tronque toujours le fichier de sortie, que vous souhaitiez ou non.

Curl is better:

curl --fail --silent --show-error -o /tmp/a http://example.com

En cas d'erreur, il ne modifie pas le fichier de sortie.

Hontvári Levente
la source