Using Dir.glob to grab only Directories

Hi,

I was wondering if there were a way to use Dir.glob to grab only
directories. After searching google for a bit I found ways to pull only
file listings, but couldn’t find one for just directories.

Currently, I’m using FileTest.directory?(dir) before running any
operations to test for a directory.

Mario Gr wrote:

Hi,

I was wondering if there were a way to use Dir.glob to grab only
directories. After searching google for a bit I found ways to pull only
file listings, but couldn’t find one for just directories.

Currently, I’m using FileTest.directory?(dir) before running any
operations to test for a directory.

Non-recursive

Dir.glob(’*’).select { |fn| File.directory?(fn) }

Recursive

Dir.glob(’**/*’).select { |fn| File.directory?(fn) }

On 03.07.2009 20:43, Andrea F. wrote:

Non-recursive

Dir.glob(’*’).select { |fn| File.directory?(fn) }

Recursive

Dir.glob(’**/*’).select { |fn| File.directory?(fn) }

For deep hierarchies it may be more efficient to use Find because you
avoid creating a large Array with lots of file names most of which you
do not want.

untested

require ‘find’
DOTS = %w{. …}

Find.find base_dir do |f|
next if DOTS.include?(File.basename(f)) || !test(?d, f)
puts “A dir which is not . or …: #{f}”
end

Kind regards

robert

On Jul 3, 2:09 pm, Mario Gr [email protected] wrote:

Hi,

I was wondering if there were a way to use Dir.glob to grab only
directories. After searching google for a bit I found ways to pull only
file listings, but couldn’t find one for just directories.

Currently, I’m using FileTest.directory?(dir) before running any
operations to test for a directory.

Trailing ‘/’:

Dir.glob(’/’).select { |fn| File.directory?(fn) }
Dir.glob(’**/
/’).select { |fn| File.directory?(fn) }

On Jul 3, 10:48 pm, Intransition [email protected] wrote:

Trailing ‘/’:

Dir.glob(’/’).select { |fn| File.directory?(fn) }
Dir.glob(’**/
/’).select { |fn| File.directory?(fn) }

Sorry, I meant:

Dir.glob(’/’)
Dir.glob(’**/
/’)

The trailing ‘/’ makes the select unnecessary.

Excellent. Thanks for the help.

This is cool - is there a way to grab only non-directories (or regular
files) ?

Thanks,
Jan