如何检查Ruby中的目录是否为空?是否有类似的东西:
Dir.exists?("directory")
(我知道那个功能不存在。)
答案 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
如果有的话,请告诉我。)