Ruby 在嵌套目录结构中查找文件

Ruby 在嵌套目录结构中查找文件,ruby,Ruby,我试图在目录中按文件名查找文件。我不确定解决这个问题的最佳方法是什么。该文件可以嵌套在根目录中的其他目录中。这应该适用于您: require 'find' file_name = /log\Z/ path = './' found_files = Find.find(path).inject([]) do |files, entry| File.file?(entry) && File.basename(entry) =~ file_name ? files &l

我试图在目录中按文件名查找文件。我不确定解决这个问题的最佳方法是什么。该文件可以嵌套在根目录中的其他目录中。

这应该适用于您:

require 'find'

file_name = /log\Z/
path = './'

found_files = Find.find(path).inject([]) do |files, entry|
  File.file?(entry) && File.basename(entry) =~ file_name ?
    files << entry : files
end

p found_files
#=> ["./Maildir/dovecot.index.log", "./pgadmin.log"]
需要“查找”
文件名=/log\Z/
路径='。/'
found|files=Find.Find(path).inject([])do | files,条目|
File.File?(条目)&&File.basename(条目)=~File\u name?
文件[”/Maildir/dovecot.index.log“,“/pgadmin.log”]
根据您的需要更改
文件名和
路径。

您可以使用或:

**
递归匹配0个或多个目录。它返回匹配的文件名数组。

您可以使用Dir.glob,例如:

Dir.glob(File.join("**","*.rb"))

它将递归地查找您当前目录中的“*.rb”文件。

我给lhofman一个接受条件,因为他的文件较短,但您的文件也较短。这不应该是标准,速度、内存使用和可维护性比大小更重要。请参阅。虽然不是完全相同,但它涵盖了扫描目录的各种方式。选择其中一个,您就可以轻松地制定解决方案。
Dir.glob(File.join("**","*.rb"))