Dir.glob递归文件搜索并在出现时停止并备份目录



我想动态地浏览一个文件的可能有很多子文件夹的。这个文件可能有几个文件夹深,所以这必须递归完成。

但我希望Dir.glob在第一次出现时停止,而不是继续浏览所有其他文件夹。我怎样才能做到这一点?

这是我现在的代码:

def find_installs
  installs = []
  glob_dir = @config[:install_folders]
  Dir.glob("#{glob_dir}**/install_file.md").each do |install_file|
    installs << File.dirname(install_file).gsub(glob_dir, "")
  end
  installs
end

我是否可以使用其他类来提供此功能?

顺便说一下,代码必须在Ruby 1.9.3 上运行

所需库为Find

我创建了一个文件夹结构如下:-

/folder1/
|- folder2/
     |-folder21/
        |-a.txt
     |-a.txt
|- folder3/
     |-folder31/
        |-a.txt
     |-a.txt

现在我写下面的代码来满足OP的需求:-

require 'find'
path_find = '/home/kirti/workspace/folder1'
Find.find(path_find) do |path|
  if FileTest.directory?(path)
    unless Dir["#{path}/a.txt"].empty?
      p "#{path}/a.txt"
      Find.prune # Don't look any further into this directory.
    else
      next
    end
  else
    # nothing
  end
end
# >> "/home/kirti/workspace/folder1/folder2/a.txt"
# >> "/home/kirti/workspace/folder1/folder3/a.txt"

您可以看到folder21也包含a.txt文件,但由于folder2包含a.txt,因此不会搜索子目录folder21。同样的解释适用于folder3及其子目录folder31

最新更新