2014-02-05 74 views
4

測試目錄是否爲空的最快方法是什麼?快速測試目錄是否爲空

當然,我可以檢查的

list.files(path, all.files = TRUE, include.dirs = TRUE, no.. = TRUE) 

的長度,但是這需要列舉,我寧願避免目錄中的全部內容。

編輯:我正在尋找便攜式解決方案。

編輯^ 2:一些時序一個巨大的目錄(目錄中的這最初是空的,它會創建100000個空文件運行此):

system.time(file.create(as.character(0:99999))) 
# user system elapsed 
# 0.720 12.223 14.948 
system.time(length(dir())) 
# user system elapsed 
# 2.419 0.600 3.167 
system.time(system("ls | head -n 1")) 
# 0 
# user system elapsed 
# 0.788 0.495 1.312 
system.time(system("ls -f | head -n 3")) 
# . 
# .. 
# 99064 
# user system elapsed 
# 0.002 0.015 0.019 

-f交換機是ls至關重要的,它將避免將發生的排序。

+0

我只是刪除我的意見(僅在Linux解決方案),但你'正確的可移植性是一個很好的功能。 – dickoa

+1

這個問題http://stackoverflow.com/questions/18685576/php-what-is-the-best-and-easiest-way-to-check-if-directory-如果目錄不是空的,rq = 1有一條推薦rmdir的註釋,請檢查你的權限級別 –

+0

是的,但是......空白或「不是很大「的目錄,你更有可能碰到哪些目錄?:-( –

回答

2

if(length(dir(all.files=TRUE)) ==0)怎麼樣?

我不知道你有什麼資格作爲「快」,但如果dir需要很長的時間,有人在濫用你的文件系統:-(。

+0

OP提到他希望避免枚舉目錄(和'dir' =='list.files')的全部內容,並且沒有'all.files = TRUE',你將錯過隱藏文件 – dickoa

+0

@dickoa好點,抱歉。但是我沒有看到枚舉有什麼不好(因爲我沒有將對象返回給環境) –

+0

實際上並不是那麼糟糕,但可能是OP只是尋找一種更有效的解決方案。我使用linux,如果我想快速完成這種任務,我通過'system'使用shell。 – dickoa