检查Ruby中的目录是否为空

Mar*_*ski 28 ruby directory

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

Dir.exists?("directory")
Run Code Online (Sandbox Code Playgroud)

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

cor*_*ard 49

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

Dir.empty?('your_directory') # => (true|false)
Run Code Online (Sandbox Code Playgroud)

在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?
Run Code Online (Sandbox Code Playgroud)

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


Pan*_*kos 9

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

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

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

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

  • Dir.glob('directory/{*,.*}')捕获"." 和"......"这么空?总是会返回false. (3认同)
  • 但是`Dir.glob('directory/*')`会遗漏以`.`开头的文件,例如`.profile`或`.git`. (2认同)

Jan*_*sch 9

从Ruby 2.4.0开始,有Dir.empty?

Dir.empty?('/') # => false
Run Code Online (Sandbox Code Playgroud)