2012-08-30 38 views

回答

69

使用--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 
+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的的stderr輸出。

+0

「實際上可以在bash中檢查其真值」並不是wget唯一的;用'--fail',可以用curl來做同樣的事情。 –

+3

這就是爲什麼我說「默認」。嘗試運行'wget google.com/asdf'和'curl google.com/asdf'。 'curl'在遇到404錯誤時默認返回EXIT_SUCCESS,而'wget'返回EXIT_FAILURE。 – ailnlv

+0

該解決方案至少對我來說效果更好 – raffi