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
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
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
--
Lars Roland
You could try:
class Dir
def Dir.isEmpty?(path)
Dir.entries(path) == [".", ".."]
end
end
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
···
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?
--
my religion is very simple. my religion is kindness. -- the dalai lama
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
···
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.
True. Oh, look - Windows has a PathIsDirectoryEmpty() function.
win32-dir 0.3.1 coming soon....
Thanks,
Dan
···
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?
At Mon, 16 Oct 2006 23:19:30 +0900,
ara.t.howard@noaa.gov wrote in [ruby-talk:220018]:
> which someone will probably compact... note that it returns false when the
> first file/dotfile is found.
not sure what you mean there - that's the correct usage... read the ri for
catch.
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
yes. that's definitely better...
that regex is deadly though:
harp:~ > irb
irb(main):001:0> "this is a file ..." =~ /\.\.?/ ? true : false
=> true
refining some of the ideas in the thread:
harp:~ > cat a.rb
class Dir
def empty?
Dir.glob("#{ path }/*", File::FNM_DOTMATCH) do |e|
return false unless %w( . .. ).include?(File::basename(e))
end
return true
end
def self.empty? path
new(path).empty?
end
end