27

How can I have wget print errors, but nothing otherwise?

In the default behavior, it shows a progress bar and lots of stuff.

In the --no-verbose version still prints one line per downloaded file, this I don't want.

The --quiet option causes it to be totally quiet, even in the case of an error, it doesn't print anything.

Is there a mode in which it prints errors, but nothing else?

17

Use curl, no point guessing what every error will look like.

[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/--silent

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.

And if you need stderr on stdout for some reason.

curl -s -S http://www.google.coccm/  2>&1 1> /dev/null
  • 1
    Unfortunately this doesn't handle typical HTTP errors (eg. 404 errors are suppressed this way), whereas the hacky wget method does. – process91 Jan 19 '17 at 5:08
  • Downvote: Although your suggestion is plausible, it does not answer the question. – Stephan Richter Apr 18 '17 at 11:40
  • Add -f/--fail to display an error message if the server returns an error code (e.g. 404) – Hontvári Levente Jun 11 '17 at 13:27
  • This could be a great answer if, the question was about curl, or if curl had feature parity with wget. Unfortunately neither is the case.. – dfc Aug 31 '17 at 18:42
16

There are very good answers in this question, be sure to check them out, but what I've done is this:

wget [wget options] 2>&1 | grep -i "failed\|error"
  • This was the only answer that worked for me with 16.04 ubuntu bash. – Ligemer Oct 7 '16 at 23:08
4

I don't see an option for that. Do you need to know what the error is, or just if it happened? If you happen to just need to know if there was error, you can use the exit status.

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

Or, maybe:

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

And you can change the cat to a grep command if you want to get fancy...

  • 3
    More simple way: wget -o logfile <url> || cat logfile – kolypto Oct 4 '09 at 11:20
  • The more simple way is worse since you probably want to exit or do something different on error, in addition to displaying the error message. – Sam Watkins Jun 20 '16 at 0:23
2

Redirect standard output to /dev/null, but keep the error output in your choice of shell.

In bash this would be:

wget [wget options] > /dev/null

Edit: So wget misbehaves. If all errors contain the word "error" in them you could pipe to grep

wget [wget options] 2>&1 | grep -i "error"
  • wget seems to send everything to stderr. – pupeno Oct 2 '09 at 19:16
  • I added another option using grep to only output errors – Ben S Oct 2 '09 at 19:19
  • stderr doesn't go through the pipe without help. – Dennis Williamson Oct 2 '09 at 19:34
  • 1
    In the end I used wget [wget options] 2>&1 | grep -i "failed\|error" – pupeno Oct 2 '09 at 19:37
1

Since wget outputs all messages on stderr, you have to use redirection before you can pipe it to grep:

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

This assumes that wget begins its error lines with "wget:".

1
OUT=`wget --no-verbose -O /tmp/a http://example.com/ 2>&1` || echo $OUT

works. But it always truncates the output file, which you may or may not want.

Curl is better:

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

In case of an error it does not modify the output file.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.