我想动态查看文件可能包含的子文件夹。这个文件可能是几个文件夹深,所以这必须递归完成。
但我希望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上运行
答案 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
的相同解释。