Get folderlist in ruby


#1

Hi all,

i am quite new to ruby and I was wondering if there is a method in ruby
to get a list of folders and subfolders.

e.g.: I have a ‘root’ directory and some sub directories and finaly some
data files.

—root
|—sub1
| |----sub1A
| | |----data.txt
| |
| |----sub1B
| |----data.txt
|
|—sub2
| |----sub2A
| | |----data.txt
. .
. .
. .
and so on.

is there a way in ruby to get a list of all subdirectories, or maybe a
string to each data.txt (this name doesnot change)

The problem is, that i don’t know how many ‘data.txt’ there are , and so
i would need a method that searches in all subdirectories(starting at
‘root’) for this file and returns an array of strings with the path to
each file.

Is there maybe another way to do this?

Thanks a lot!

best regards,
Roman


#2

Roman L. wrote:

Hi all,

i am quite new to ruby and I was wondering if there is a method in ruby
to get a list of folders and subfolders.

The standard Find module should let you do this.

require ‘find’

files = []
Find.find( “root” ) do |path|
files << path if File.basename( path ) == “data.txt”
end


#3

2006/5/31, Roman L. removed_email_address@domain.invalid:

 |     |----sub1A
 .     .

and so on.

is there a way in ruby to get a list of all subdirectories, or maybe a
string to each data.txt (this name doesnot change)

The problem is, that i don’t know how many ‘data.txt’ there are , and so
i would need a method that searches in all subdirectories(starting at
‘root’) for this file and returns an array of strings with the path to
each file.

files = Dir[ ‘root/**/data.txt’ ]

Is there maybe another way to do this?

Yes, you can also use Find:

require ‘find’
Find.find( ‘root’ ) {|f| p f if File.basename(f) == “data.txt”}

Kind regards

robert


#4

WOW!
thanks for the very good answers!!!

I was searching in the file and DIR class to find something.
well i am not yet familiar with ruby.
but its amazing.

Thanks a lot to all of you!

Roman


#5

On May 31, 2006, at 7:27 AM, Roman L. wrote:

—root
. .
‘root’) for this file and returns an array of strings with the path to
each file.

Neo:~/Desktop$ ruby search.rb
root/sub1/sub1A/data.txt
root/sub1/sub1B/data.txt
root/sub2/sub2A/data.txt
Neo:~/Desktop$ cat search.rb
#!/usr/local/bin/ruby -w

def search( directory, pattern )
result = Array.new
Dir.glob("#{directory}/*") do |file|
next if file[0] == ?.
if File.directory? file
result.push(*search(file, pattern))
elsif file =~ pattern
result << file
end
end
result
end

puts search(“root”, /data.txt\Z/)

Hope that helps.

James Edward G. II