URLが存在する(200を返す)かどうかをtrueまたはfalseと評価する単純なシェル(+ curl)チェックを探しています。
--fail
を使用すると、失敗したリクエストの終了ステータスがゼロ以外になります。 --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
私は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のstderr出力を抑制します。