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

时间:2014-04-16 18:10:48

标签: ruby recursion

我想动态查看文件可能包含的子文件夹。这个文件可能是几个文件夹深,所以这必须递归完成。

但我希望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上运行

1 个答案:

答案 0 :(得分:1)

必需的lib是Find

我创建了一个Folder结构,如下所示: -

/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的相同解释。