检查 Ruby 中的目录是否为空

发布于 2024-10-18 21:02:43 字数 108 浏览 4 评论 0原文

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

Dir.exists?("directory")

我知道这个功能不存在。)

How can I check to see if a directory is empty or not in Ruby? Is there something like:

Dir.exists?("directory")

(I know that that function doesn't exist.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

拔了角的鹿 2024-10-25 21:02:43

Ruby 现在有 Dir.empty?< /a>,使这变得非常简单:

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?

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

Ruby now has Dir.empty?, making this trivially easy:

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

In Rubies prior to 2.4.0 you can just get a list of the entries and see for yourself whether or not it's empty (accounting for "." and ".."). See the docs.

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

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

Update: the first method above used to use a regex; now it doesn't (obviously). Comments below mostly apply to the former (regex) version.

烟─花易冷 2024-10-25 21:02:43

从 Ruby 2.4.0 开始,有 Dir.空?

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

As of Ruby 2.4.0, there is Dir.empty?

Dir.empty?('/') # => false
内心荒芜 2024-10-25 21:02:43

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

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.

You can use entries to see all files and folders in a directory:

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

You can also search for files only using glob:

Dir.glob('directory/{*,.*}')
=> ['file.rb', '.git']
Dir.glob('directory/{*,.*}').empty? # Check if empty with no files.
走过海棠暮 2024-10-25 21:02:43

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

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

...但在 Linux 或 Cygwin 上不起作用。 (感谢@DamianNowak)改编潘的答案:

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

应该有效。

An empty directory should only have two links (. and ..). On OSX this works:

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

...but does not work on Linux or Cygwin. (Thanks @DamianNowak) Adapting Pan's answer:

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

should work.

初与友歌 2024-10-25 21:02:43

并不简单,但在 *nix 类型的系统中工作得很好。

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

Not straightforward but works perfect in *nix kind of systems.

Dir.entries(directory_path) == ['.', '..']
前事休说 2024-10-25 21:02:43

这是我的模板。仅供参考,我正在源中寻找特定匹配的文件。

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

如果有的话请告诉我:)

Here is my template for this one.FYI , i am looking for a certain match of files inside the source.

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

let me know if anything :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文