我试图通过预定义的dir路径集,但我只有路径的前缀
我试过用include吗?或找到一种方法。我只能考虑定义一个正则表达式的简单解决方案,并在集合中为每个解决方案,但这似乎不是那么像红宝石般的样式
require 'set'
legal_paths = Set['A/B/C', 'A/D/E', 'A/F/G']
Dir.glob('**/system.log').each do |fd|
if failed_tests_path.include?(fd) #fd for example = A/F/G/E/system.log, A/B/C/K/system.log etc...
puts fd
end
end
我希望fd只是路径包含在集合中的system.log文件(集合保存路径的前缀)
如果这些只是前缀,请尝试String#start_with?
:
require 'set'
legal_paths = Set['A/B/C', 'A/D/E', 'A/F/G']
files = Dir.glob('**/system.log').select do |fd|
fd.start_with?(*legal_paths)
end
为什么不利用你可以在glob中指定这些前缀的事实?
legal_paths = ['A/B/C', 'A/D/E', 'A/F/G']
files = Dir.glob("{#{legal_paths.join(',')}}/**/system.log")
请注意,如果用户输入legal_paths
,则上述可能不安全,因为用户可以使用..
遍历父目录。