Wgetはサイレントですが、エラーメッセージが表示されます


10

Wgetでファイルをダウンロードしたいのですが、通常のUNIXの考え方では、ダウンロードが成功した場合に何も出力したくありません。ただし、ダウンロードが失敗した場合、エラーメッセージが必要です。

この-qオプションは、エラーメッセージを含むすべての出力を抑制します。-nv代わりにオプションを含めても、Wgetは(stderrに)引き続き印刷します。

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

どうすればその出力も削除できますが、それでもエラーメッセージが表示されますか?

回答:


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に送られることを逃しました。stdoutを/ dev / nullにリダイレクトするだけの答えを削除しました。
chepner

5
それは機能しますが、それは不十分です。error_log=$(wget -nv example.net 2>&1) || echo $error_logよりエレガントなソリューションですが、まだ不器用です。
phihag

4

curl代わりに試してください:

curl -fsS $url -o $file

ロングバージョン:

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

GNOMEユーザーはGvfsを試すことができます。

gvfs-cp $url $file

1
残念ながら、すべてのdebianシステムにはcurlがプリインストールされていません。
phihag

なぜ追加するの--failですか?HTTPエラーをstderrに行きたいものとして扱うのは意味がないのではないでしょうか。
ギラドマヤニ2017年

それは正確に何の組み合わせだ--fail--show-errorしません。
user1686 2017年

1

現在、すべてのwget出力はstderrに送られるため、この「エレガントな方法」を解決するには、wgetソースにパッチを適用する必要があるようです。

wgetソースの設計は、エラーメッセージとエラーメッセージではない単純な分割ではなく、メッセージ間の詳細レベルの違いを指示します。

このhttp://savannah.gnu.org/bugs/?33839に関する未解決のバグがあり、古い議論もいくつかあります。ここに推奨パッチhttp://www.mail-archive.com/wget%40sunsite.dk/msg03289.htmlがあり、ここにこのhttp://www.mail-archive.com/wgetに関するHrvoje Niksicからの回答があります。 %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+\]$"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.