检查Ruby中的目录是否为空

时间:2011-02-20 18:48:32

标签: ruby directory

如何检查Ruby中的目录是否为空?是否有类似的东西:

Dir.exists?("directory")

(我知道那个功能不存在。)

6 个答案:

答案 0 :(得分:47)

Ruby现在有Dir.empty?,这使得这很简单:

Dir.empty?('your_directory') # => (true|false)

在2.4.0之前的Rubies中,您可以获得一个条目列表,并亲自查看它是否为空(占“。”和“..”)。请参阅the docs

(Dir.entries('your_directory') - %w{ . .. }).empty?

# or using glob, which doesn't match hidden files (like . and ..)
Dir['your_directory/*'].empty?

更新:上面第一个使用正则表达式的方法;现在它(显然)没有。以下评论主要适用于前(正则表达式)版本。

答案 1 :(得分:9)

您可以使用条目查看目录中的所有文件和文件夹:

Dir.entries('directory')
=> ['.', '..', 'file.rb', '.git']
Dir.entries('directory').size <= 2 # Check if empty with no files or folders.

您也可以仅使用glob搜索文件:

Dir.glob('directory/{*,.*}')
=> ['file.rb', '.git']
Dir.glob('directory/{*,.*}').empty? # Check if empty with no files.

答案 2 :(得分:9)

从Ruby 2.4.0开始,有Dir.empty?

Dir.empty?('/') # => false

答案 3 :(得分:3)

空目录应该只有两个链接(。和..)。在OSX上,这有效:

File.stat('directory').nlink == 2

...但不适用于Linux或Cygwin。 (感谢@DamianNowak)改编潘的答案:

Dir.entries('directory').size == 2

应该有用。

答案 4 :(得分:1)

不直接,但在* nix系统中运作良好。

Dir.entries(directory_path) == ['.', '..']

答案 5 :(得分:0)

这是我的模板.FYI,我正在寻找源内文件的特定匹配。

mydir = "/home/to/mydir"

Dir.chdir(mydir)

if Dir.entries(mydir).select(|x| x != '.' && x != '..' && x =~ /\regex.txt\z/).size > 0


       do_something 

elsif Dir.entries(mydir).select(|x| x != '.' && x != '..' && x =~ /\regex.txt\z/).size < 0

      do_something_else 

else 

      puts "some warning message"
end

如果有的话,请告诉我。)