Wget 不发出任何声音,但会显示错误消息

Wget 不发出任何声音,但会显示错误消息

我想下载一个文件获得,但按照通常的 UNIX 哲学,我不希望它输出任何事物如果下载成功,则显示错误消息。但是,如果下载失败,则显示错误消息。

-q选项会抑制所有输出,包括错误消息。如果我改为包含-nv选项,Wget 仍会打印(在 stderr 上):

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

我怎样才能删除该输出但仍然收到错误消息?

答案1

请尝试curl

curl -fsS $url -o $file

长版本:

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

GNOME 用户可以尝试 Gvfs:

gvfs-cp $url $file

答案2

如果你得不到更好的答案,那么就使用蹩脚的黑客技术:

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

(2> /tmp/err.log 将 stderr 重定向到 tmp 文件;如果 wget 返回 0 [成功],则 || 短路,否则它将打印出错误日志值)

答案3

由于目前所有 wget 输出都转到 stderr,因此要以“优雅的方式”解决这个问题,似乎必须修补 wget 源。

wget 源设计规定了消息之间的详细程度差异,而不是错误和非错误消息之间的简单划分。

有一个关于此问题的未解决的错误http://savannah.gnu.org/bugs/?33839,还有一些较早的讨论。这是一个建议的补丁http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html以下是 Hrvoje Niksic 对此的回答http://www.mail-archive.com/wget%40sunsite.dk/msg03330.html

除此之外,当然还有您在评论中针对 Foon 不太优雅的解决方案提出的好的解决方案。

答案4

实现您想要的最简单的语法是

wget <url> 2>&1 | grep ERROR

例子

$ wget https://google.com/ 2>&1 | grep ERROR #this gives no output
$ wget https://google.com/randomstring 2>&1 | grep ERROR
2020-11-20 11:36:30 ERROR 404: Not Found.

解释

  • 2>&1将 stderr 重定向到 stdout 以捕获wget的输出
  • grep ERROR禁止输出除字符串“ERROR”之外的所有行

相关内容