2012-08-30 3 views

答えて

69

--failを使用すると、失敗した要求に対して終了ステータスが0以外になります。 --headを使用すると、ファイルの内容をダウンロードすることはありません。なぜなら、このチェックのためにファイルの内容をダウンロードする必要がないからです。 --silentを使用すると、チェック自体によってステータスまたはエラーが発生することはありません。

if curl --output /dev/null --silent --head --fail "$url"; then 
    echo "URL exists: $url" 
else 
    echo "URL does not exist: $url" 
fi 

サーバーがHEAD要求を拒否した場合、代替は、ファイルの最初のバイトだけを要求することです:

if curl --output /dev/null --silent --fail -r 0-0 "$url"; then 
+4

ヘッダーの標準出力への印刷を抑制する '-o/dev/null'をインクルードしてください。 –

+0

@ShawnChinよろしくお願い致します。 –

+0

素晴らしい...それはうまくいきます。ありがとうございます –

13

私はwgetのはCURLよりも、このためのより良いツールであることがわかりました。覚えておくオプションが少なくなり、実際にbashの真理値をチェックして、デフォルトで成功したかどうかを確認することができます。

if wget --spider http://google.com 2>/dev/null; then 
    echo "File exists" 
else 
    echo "File does not exist" 
fi 

--spiderオプションは、Wgetはそれをダウンロードするのではなく、ファイルをチェックし、2> /dev/null沈黙のwgetを標準エラー出力になります。

+0

"実際にbashでその真偽値をチェックできる"というのは、wgetでは一意ではありません。 '--fail'で、カールでも同じことができます。 –

+3

だから、私は「デフォルトで」言った。 'wget google.com/asdf'と' curl google.com/asdf'を実行してみてください。 'curl'は404エラーが発生したときにデフォルトでEXIT_SUCCESSを返し、' wget'はEXIT_FAILUREを返します。 – ailnlv

+0

このソリューションは、少なくとも私にとってはより効果的です – raffi

関連する問題