From: Robert Klemme Date: 2009-09-16T15:51:55+09:00 Subject: Re: Find.find, limited recursion.. 2009/9/15 Brian Wallace : > 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! require 'no gems' # silly joke Dir["#{@root_dir}/*/*"].each do |f| next unless File.file? f d, b = File.split f process_list[d] << b end Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/