我想动态地浏览一个文件的可能有很多子文件夹的。这个文件可能有几个文件夹深,所以这必须递归完成。
但我希望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
。