Forum: Ruby Get folderlist in ruby

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
F1b868fb6a56d917e8fedebbaca05307?d=identicon&s=25 Roman Leitner (Guest)
on 2006-05-31 14:26
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
357558a6682f4d6624594763d9acdb35?d=identicon&s=25 Mike Fletcher (fletch)
on 2006-05-31 14:34
Roman Leitner 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
E0d864d9677f3c1482a20152b7cac0e2?d=identicon&s=25 Robert Klemme (Guest)
on 2006-05-31 14:36
(Received via mailing list)
2006/5/31, Roman Leitner <roman.leitner@philips.com>:
>      |     |----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
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2006-05-31 14:42
(Received via mailing list)
On May 31, 2006, at 7:27 AM, Roman Leitner 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 Gray II
F1b868fb6a56d917e8fedebbaca05307?d=identicon&s=25 Roman Leitner (Guest)
on 2006-05-31 15:31
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
This topic is locked and can not be replied to.