更新时间: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 :-(.