web-dev-qa-db-ja.com

シェルにURLが存在し、おそらくカールしていることを確認する方法は?

URLが存在する(200を返す)かどうかをtrueまたはfalseと評価する単純なシェル(+ curl)チェックを探しています。

59
sorin

--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
101
Charles Duffy

私は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出力を抑制します。

23
ailnlv