2010-01-06 8 views
17

Bunu yapmak için daha temiz bir yerleşik yol var mı?Dizinde bir dizindeki dizinleri listelemek için dahili yol

ree> Pathname.new('/path/to').children.select{|e| e.directory?}.map{|d| d.basename.to_s} 
=> ["test1", "test2"] 

İdeal directory? görüşme tam yol ihtiyacınız olup olmadığına veya olmasın bağlı Chandra'nın cevap başlayarak

+0

olası bir kopyası [Bir dizindeki klasörlerin listesini alma] (http://stackoverflow.com/questions/1899072/getting-a-list-of-folders-in-a-directory) –

cevap

33

önlemek istiyoruz, sen

Dir['app/*/'] 
# => ["app/controllers/", "app/helpers/", "app/metal/", "app/models/", "app/sweepers/", "app/views/" 

Dir['app/*/'].map { |a| File.basename(a) } 
# => ["controllers", "helpers", "metal", "models", "sweepers", "views"] 

Eğer kullanabilirsiniz Ruby> = 1.8.7 kullanın, Chandra'nın cevabı da

Pathname.glob('app/*/').map(&:basename) 
# you can skip .to_s unless you don't need to work with strings 
# remember you can always use a pathname as string for the most part of Ruby functions 
# or interpolate the value 
olarak yeniden yazılabilir
9
Pathname.glob("/path/to/*/").map { |i| i.basename.to_s } 
+0

Bu yalnızca dir –

+0

isimleri bu benim upvote vardır, ama daha temiz bir çözüm –

+0

@ Chandra Patni açılırsa, kabul için biraz bekleyeceğim. – johannes

İlgili konular