检查Ruby中的目录是否为空

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

Dir.exists?("directory") 

(我知道那个function不存在。)

Ruby现在有Dir.empty? ,使这简单易行:

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

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

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

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

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

 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. 

从Ruby 2.4.0开始,有Dir.empty?

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

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

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

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

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

应该管用。

不是直截了当的,但在* nix类系统中工作得很好。

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

这是我的模板.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 

如果有的话,让我知道:)