# Iterating over directories

**URL:** <https://www.ruby-forum.com/t/iterating-over-directories/165554>\
**Category:** Ruby\
**Created:** [April 15, 2009, 7:41am UTC](https://www.ruby-forum.com/t/iterating-over-directories/165554 "2009-04-15T07:41:44Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![dafydd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8491ac/32.png) [@dafydd](https://www.ruby-forum.com/u/dafydd)\
**Post date:** [April 15, 2009, 7:41am UTC](https://www.ruby-forum.com/t/iterating-over-directories/165554/1 "2009-04-15T07:41:44Z")

</div>

I got this oneliner that isn’t producing the output I was expecting (it  
printing all of the directories in the linux root directory).

irb(main):012:0\> Dir.new("/").each { |name| puts name if  
File.directory?(name) }  
…  
.  
=\> #Dir:/

Does anyone know what I might be doing incorrectly?

---

<div class="post-metadata">

**Author:** ![dafydd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8491ac/32.png) [@dafydd](https://www.ruby-forum.com/u/dafydd)\
**Post date:** [April 15, 2009, 7:59am UTC](https://www.ruby-forum.com/t/iterating-over-directories/165554/2 "2009-04-15T07:59:53Z")

</div>

On Wed, Apr 15, 2009 at 7:41 AM, Dafydd F.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I got this oneliner that isn’t producing the output I was expecting (it  
> printing all of the directories in the linux root directory).
> 
> irb(main):012:0\> Dir.new(“/”).each { |name| puts name if  
> File.directory?(name) }  
> …  
> .  
> =\> #Dir:/
> 
> Does anyone know what I might be doing incorrectly?

It should be printing all of the directories in the linux root.  
What do you want it to do?

Andrew T.  
[http://ramblingsonrails.com](http://ramblingsonrails.com)  
[http://www.linkedin.com/in/andrewtimberlake](http://www.linkedin.com/in/andrewtimberlake)

“I have never let my schooling interfere with my education” - Mark Twain

---

<div class="post-metadata">

**Author:** ![dafydd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8491ac/32.png) [@dafydd](https://www.ruby-forum.com/u/dafydd)\
**Post date:** [April 15, 2009, 8:04am UTC](https://www.ruby-forum.com/t/iterating-over-directories/165554/3 "2009-04-15T08:04:22Z")

</div>

Andrew T. wrote:

> On Wed, Apr 15, 2009 at 7:41 AM, Dafydd F.  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> It should be printing all of the directories in the linux root.  
> What do you want it to do?

I’m just having it print for now for debugging purposes. But eventually  
it will be storing all of the directory names in an array. Or is there  
any other way I can control that block to do different things if the  
current item is a file and do something else if it is a directory?

---

<div class="post-metadata">

**Author:** ![dafydd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8491ac/32.png) [@dafydd](https://www.ruby-forum.com/u/dafydd)\
**Post date:** [April 15, 2009, 8:04am UTC](https://www.ruby-forum.com/t/iterating-over-directories/165554/4 "2009-04-15T08:04:34Z")

</div>

Solution :-  
Dir.new("/").each { |name| puts name if File.directory?( “/” + name) }

---

<div class="post-metadata">

**Author:** ![dafydd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8491ac/32.png) [@dafydd](https://www.ruby-forum.com/u/dafydd)\
**Post date:** [April 15, 2009, 8:24am UTC](https://www.ruby-forum.com/t/iterating-over-directories/165554/5 "2009-04-15T08:24:18Z")

</div>

Siddick E. wrote:

> Solution :-  
> Dir.new("/").each { |name| puts name if File.directory?( “/” + name) }

Solved, thank you good sir.

---

<div class="post-metadata">

**Author:** ![dafydd](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8491ac/32.png) [@dafydd](https://www.ruby-forum.com/u/dafydd)\
**Post date:** [April 15, 2009, 9:31am UTC](https://www.ruby-forum.com/t/iterating-over-directories/165554/6 "2009-04-15T09:31:58Z")

</div>

2009/4/15 Dafydd F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Siddick E. wrote:
> 
> > Solution :-  
> > Dir.new(“/”).each { |name| puts name if File.directory?( “/” + name) }
> 
> Solved, thank you good sir.

Here’s another one:

puts Dir[“/\*”].select {|f| test ?d, f}

Cheers

robert
