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?

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"

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

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 ...


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"

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:".


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.