From: Daniel Berger Date: 2009-09-16T10:48:36+09:00 Subject: Re: Find.find, limited recursion.. Brian Wallace wrote: > Hi all, > > I'm working on a script that's currently using Find.find to process a > complete directory tree of files and directories .. .however I needed > specific behavior, and I'm still fairly new to this... > > Basically it works like this, the user specifies the root directory of a > collection of sub-directories we are interested in .. for instance: > > User specifies: C:\Root > > C:\Root > | > -->\Dir1 > | > -->Files_in_dir1 > | > -->\Dir2 > | > -->Files_in_dir2 > > > But we are only interested in the _files_ in \Dir1 , \Dir2 ..and want to > essentially Prune recursion into C:\Root\Dir1\Subdir_of_Dir1 , and > C:\Root\Dir2\Subdir_of_Dir2 if those exist .. > > This is what I am currently using, however it will pick up the sub > directories of Dir1 and Dir2 and update the hash... Does anyone see any way > this could be refactored to not update the "process_list" hash with the sub > directories of Dir1 and Dir2? > > -- > > @root_dir = "C:\Root" > > process_list = Hash.new {|h,k| h[k] = []} > > Find.find(@root_dir.to_s) do |f| > f = f.gsub(/\\/,'/') > next if File.stat(f).directory? or f.include?('skipped_filename') > Find.prune if f.include?("skipped_dirname") > d, b = File.split(f) > process_list [d] << b > end > > Thanks in advance! > > Brian > Perhaps you would like file-find better. I think this is what you want: gem install file-find rule = File::Find.new( :path => ['C:/Root/Dir1', 'C:/Root/Dir2'], :maxdepth => 2, :directory? => false ) p rule.find http://shards.rubyforge.org/wiki/wiki.pl?File-Find Regards, Dan