2015-05-14 33 views
1

我想檢查一個給定的目錄是否存在於遠程服務器中,只要指向該目錄的URL。例如:用R檢查遠程目錄是否存在

url <- "http://plasmodb.org/common/downloads/release-24" 

這怎麼能在R中完成?我曾考慮使用url.show,它會下載並顯示url,如果存在但在不存在目錄的情況下會給出錯誤。但我不確定最好的方法是什麼,最好不必在現有目錄的情況下下載整個URL。

+0

你試過'?file.exists'嗎? – tospig

+0

@tospig是的。它不起作用。 'file.exists(url)'返回'FALSE',但它應該是'TRUE'。 – ddiez

回答

5

這將高度依賴於所討論的服務器/資源,因爲它與HTTP狀態碼有關的多於R能力。提供的遠程服務器配置爲正確地響應目錄索引請求您可以使用HEADhttr此:

library(httr) 

status <- HEAD("http://plasmodb.org/common/downloads/release-24/") 
status$status_code 
## [1] 200 

status <- HEAD("http://plasmodb.org/common/downloads/release-100/") 
status$status_code 
## [1] 404 

這裏的狀態代碼http://httpstatus.es一個很好的格式列表,這裏有一個顯着的RFC http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html,你也應該仔細閱讀其他部分。最後,這裏有一個維基百科鏈接http://en.wikipedia.org/wiki/Webserver_directory_index討論「目錄索引」。這表明你可能會得到一個403 vs 200404取決於配置(並且它並不僅限於依賴於Web服務器)。

+0

謝謝您的回答和擴展信息。看起來沒有一個通用的方法(正如你提到它取決於服務器配置)。在我的情況下,我想訪問特定的服務器,所以希望事情會隨着時間的推移保持一致。無論如何,我可以嘗試其他方式來解決我的問題,但這是非常有用的知識。 – ddiez