首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以在Ruby中全局处理一个目录,但不包括某些目录?

有没有一种方法可以在Ruby中全局处理一个目录,但不包括某些目录?
EN

Stack Overflow用户
提问于 2010-12-22 09:54:41
回答 6查看 20.8K关注 0票数 27

我想将一个目录全局化为后处理头文件。然而,我想排除项目中的一些目录。现在默认的方式是...

代码语言:javascript
复制
Dir["**/*.h"].each { |header|
    puts header
}

如果每个头条目都在被排除的目录中,那么手动检查每个头条目似乎效率不高。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-12-22 09:58:40

不要使用全局绑定,而要使用Find。Find旨在使您能够在遇到目录和文件时访问它们,您可以通过编程方式决定何时退出某个目录并转到下一个目录。请参阅文档页面上的示例。

如果你想继续使用globbing,这将给你一个开始的地方。您可以将多个测试放在reject中或放在一起:

代码语言:javascript
复制
Dir['**/*.h'].reject{ |f| f['/path/to/skip'] || f[%r{^/another/path/to/skip}] }.each do |filename|
  puts filename
end

您可以在测试中使用固定字符串或正则表达式。

票数 27
EN

Stack Overflow用户

发布于 2014-12-30 22:58:47

我知道这已经晚了4年,但是对于遇到这个问题的任何其他人,你可以像从Bash通配符中排除一样从Dir中排除:

代码语言:javascript
复制
Dir["lib/{[!errors/]**/*,*}.rb"]

它将排除任何以“错误”开头的文件夹。如果你愿意,你甚至可以省略/并将其转换成某种通配符。

票数 61
EN

Stack Overflow用户

发布于 2010-12-22 14:52:14

还有来自Rake gem的FileList (它几乎总是默认安装的,并且包含在Ruby1.9的标准库中):

代码语言:javascript
复制
files = FileList['**/*.h'].exclude('skip_me')

FileList有很多有效处理globs的功能。

您可以在此处找到文档:http://rake.rubyforge.org/classes/Rake/FileList.html

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4505566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档