我想将一个目录全局化为后处理头文件。然而,我想排除项目中的一些目录。现在默认的方式是...
Dir["**/*.h"].each { |header|
puts header
}如果每个头条目都在被排除的目录中,那么手动检查每个头条目似乎效率不高。
发布于 2010-12-22 09:58:40
不要使用全局绑定,而要使用Find。Find旨在使您能够在遇到目录和文件时访问它们,您可以通过编程方式决定何时退出某个目录并转到下一个目录。请参阅文档页面上的示例。
如果你想继续使用globbing,这将给你一个开始的地方。您可以将多个测试放在reject中或放在一起:
Dir['**/*.h'].reject{ |f| f['/path/to/skip'] || f[%r{^/another/path/to/skip}] }.each do |filename|
puts filename
end您可以在测试中使用固定字符串或正则表达式。
发布于 2014-12-30 22:58:47
我知道这已经晚了4年,但是对于遇到这个问题的任何其他人,你可以像从Bash通配符中排除一样从Dir中排除:
Dir["lib/{[!errors/]**/*,*}.rb"]它将排除任何以“错误”开头的文件夹。如果你愿意,你甚至可以省略/并将其转换成某种通配符。
发布于 2010-12-22 14:52:14
还有来自Rake gem的FileList (它几乎总是默认安装的,并且包含在Ruby1.9的标准库中):
files = FileList['**/*.h'].exclude('skip_me')FileList有很多有效处理globs的功能。
您可以在此处找到文档:http://rake.rubyforge.org/classes/Rake/FileList.html
https://stackoverflow.com/questions/4505566
复制相似问题