我想整理一個目錄來後處理頭文件。但我想排除項目中的一些目錄。眼下的默認方式是...有沒有辦法在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