I want to glob a directory to post-process header files. Yet I want to exclude some directories in the project. Right now the default way is...
Dir["**/*.h"].each { |header|
puts header
}
Seems inefficient to check each header entry manually if it's in an excluded directory.
There's
FileList
from the Rake gem (which is almost always installed by default, and is included in the standard library in Ruby 1.9):FileList
has lots of functionality for working with globs efficiently.You can find the documentation here: http://rake.rubyforge.org/classes/Rake/FileList.html
I know this is 4 years late but for anybody else that might run across this question you can exclude from Dir the same way you would exclude from Bash wildcards:
Which will exclude any folder that starts with "errors" you could even omit the
/
and turn it into a wildcard of sorts too if you want.Don't use globbing, instead use
Find
. Find is designed to give you access to the directories and files as they're encountered, and you programmatically decide when to bail out of a directory and go to the next. See the example on the doc page.If you want to continue using globbing this will give you a starting place. You can put multiple tests in
reject
or'd together:You can use either fixed-strings or regex in the tests.
One way:
this is similar to a few other answers just written a bit differently
Ill create an array that can be passed to a .each iteration or something else.
release_safelist = Dir.glob('*').reject{|file| (file == "softlinks") || (file == "ci") || (file.include? "SNAPSHOT")}
In this case im creating an array without files/dir named either ci, softlinks, or containing SNAPSHOT