Wget处于静默状态,但显示错误消息


11

我想使用Wget下载文件,但是按照通常的UNIX哲学,如果下载成功,我不希望它输出任何内容。但是,如果下载失败,我将显示一条错误消息。

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

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

如何删除该输出,但仍然收到错误消息?

Answers:


5

请尝试curl

curl -fsS $url -o $file

长版:

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

GNOME用户可以尝试Gvfs:

gvfs-cp $url $file

1
不幸的是,并不是所有debian系统上都预装了curl。
phihag 2012年

为什么要添加--fail?将HTTP错误视为您想要转到stderr的东西是否有意义?
吉拉德·马亚尼

这正是--failand 的结合--show-error
user1686

4

如果您找不到更好的答案,脚的骇客:

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

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


+1我错过了所有输出都将送到stderr;我已经删除了将标准输出重定向到/ dev / null的答案。
chepner 2012年

5
可以,但是很but error_log=$(wget -nv example.net 2>&1) || echo $error_log是更优雅的解决方案,但仍然笨拙。
皮哈格2012年

1

由于当前所有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不太优雅的解决方案的评论中提出好的解决方案。


0

您还可以通过管道将输出传递到grep并过滤出成功消息。

这应该工作:

wget ... -nv 2>&1 | grep -Pv "^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d URL:.*\[\d+\] -> ".*" \[\d+\]$"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.