90

我正在寻找一个简单的 shell (+curl) 检查,如果 URL 存在(返回 200)或不存在,它将评估为真或假。

4

2 回答 2

150

使用--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
于 2012-08-30T14:24:33.077 回答
38

我发现 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/nullwget 的 stderr 输出静音。

于 2015-04-24T22:52:21.193 回答