ara.t.howard / noaa.gov wrote:
> On Mon, 16 Oct 2006, Daniel Berger wrote:
> 
>> lroland / gmail.com wrote:
>>> Hi all
>>>
>>> I browsed through the FileUtils and Dir documentation and found no
>>> obvious way to test if a directory exists and is empty. Various hacks
>>> can be used (like checking file count and size, testing if the
>>> directory can be deleted..) but they all left me wondering if i some
>>> how missed a Dir.isEmpty? like method ?
>>>
>>> So in short is there a real Ruby way of telling whether a directory if
>>> empty
>>
>> if Dir["/foo/bar/*"].empty?
> 
> that'll crawl if a directory is huge though... i've used this
> 
> 
>   d = "the_dir"
> 
>   empty =
>     catch("empty"){
>       Dir.glob("#{ d }/*"){ throw "empty", false }  # if we find any 
> file return false
>       Dir.glob("#{ d }/.*"){ throw "empty", false } # if we find any 
> dotfile/hidden return false
>       throw "empty", true                           # otherwise return true
>     }
> 
> which someone will probably compact... note that it returns false when the
> first file/dotfile is found.
> 
> cheers.
> 
> -a

Not sure about using throw to return values there...  Also, won't the 
"Dir.glob("#{ d }/.*")" return [".", ".."] (well, pass "." to the block) 
and break this?

How about:

def isEmpty?(dir)
   Dir.glob("#{dir}/*", File::FNM_DOTMATCH) do |f|
     return false unless f =~ /\.\.?/
   end
   return true
end