我想整理一个目录来后处理头文件。但我想排除项目中的一些目录。眼下的默认方式是...有没有办法在Ruby中放置目录但排除某些目录?
Dir["**/*.h"].each { |header|
puts header
}
似乎低效的手工检查每头项,如果它在排除的目录中。
我想整理一个目录来后处理头文件。但我想排除项目中的一些目录。眼下的默认方式是...有没有办法在Ruby中放置目录但排除某些目录?
Dir["**/*.h"].each { |header|
puts header
}
似乎低效的手工检查每头项,如果它在排除的目录中。
请勿使用通配符,而应使用Find
。查找旨在让您访问遇到的目录和文件,并以编程方式决定何时退出目录并转到下一个目录。请参阅文档页面上的示例。
如果你想继续使用globbing这会给你一个开始的地方。你可以把多个测试中reject
或运算在一起:
Dir['**/*.h'].reject{ |f| f['/path/to/skip'] || f[%r{^/another/path/to/skip}] }.each do |filename|
puts filename
end
您可以在测试中使用的是固定的字符串或正则表达式。
方式一:
require 'find'
ignores = ['doc','test','specifications']
Find.find(ENV['HOME']) do |path|
name = File.basename(path)
if FileTest.directory?(path)
if ignores.include?(name)
Find.prune
else
next
end
else
puts path if name =~ /.h$/
end
end
有来自耙创业板公司FileList
(这几乎总是默认安装的,并且包含在标准库中的Ruby 1.9):
files = FileList['**/*.h'].exclude('skip_me')
FileList
有大量的功能可以有效地处理球体。
您可以在这里找到的文档:http://rake.rubyforge.org/classes/Rake/FileList.html
我知道这4年迟,但对于其他人可能会碰到这个问题,你可以从迪尔排除,你会从猛砸通配符排除以同样的方式运行:
Dir["lib/{[!errors/]**/*,*}.rb"]
这将排除任何以“错误”开头的文件夹,您甚至可以省略/
并将其变为各种通配符,如果需要的话。
files = Dir.glob(pattern)
files -= Dir.glob("#{exclude}/**/*")
这类似于刚刚写有点不同
生病创建一个可以传递给。每次迭代或别的什么数组一些其他的答案。
release_safelist = Dir.glob('*')。reject {| file | (文件==“softlinks”)|| (文件==“ci”)|| (file.include?“快照”)}
在这种情况下创建即时没有命名或者Cl,软链接,或含有快照
文件/目录的阵列我不能找出如何正确使用.reject。它不支持与.glob相同的通配符吗?想要做...拒绝{| f | f ['**/*。tmpl.html']} .each {... – SimplGy 2012-11-01 22:25:22
也没有... .reject { | f | File.fnmatch('**。tmpl.html',f) } .each {... :) – SimplGy 2012-11-01 22:32:32