且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

快速测试目录是否为空

更新时间:2023-11-29 15:25:40

if(length(dir(all.files = TRUE))== 0)



我不知道你的资格是快,但如果 dir 需要很长时间,有人滥用你的文件系统:-(。


What is the fastest way to test if a directory is empty?

Of course I can check the length of

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

but this requires enumerating the entire contents of the directory which I'd rather avoid.

EDIT: I'm looking for portable solutions.

EDIT^2: Some timings for a huge directory (run this in a directory that's initially empty, it will create 100000 empty files):

> 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 

The -f switch is crucial for ls, it will avoid the sorting that will take place otherwise.

How about if(length(dir(all.files=TRUE)) ==0) ?

I'm not sure what you qualify as "fast," but if dir takes a long time, someone is abusing your filesystem :-(.