获取目录中的文件夹列表

如何使用ruby获取某个目录中的文件夹列表?

Dir.entries()看起来很接近,但我不知道如何限制到文件夹只。

Jordan很接近,但是Dir.entries没有返回File.directory?的完整pathFile.directory? 预计。 尝试这个:

  Dir.entries('/your_dir').select {|entry| File.directory? File.join('/your_dir',entry) and !(entry =='.' || entry == '..') } 

我发现这更有用和易于使用:

 Dir.chdir('/destination_directory') Dir.glob('*').select {|f| File.directory? f} 

它会获取当前目录中的所有文件夹,排除在外...

recursion文件夹只需使用**代替*

在我看来, Pathname名比起纯string更适合于文件名。

 require "pathname" Pathname.new(directory_name).children.select { |c| c.directory? } 

这将为该目录中的所有目录提供一个数组作为path名对象。

如果你想有string

 Pathname.new(directory_name).children.select { |c| c.directory? }.collect { |p| p.to_s } 

如果directory_name是绝对的,那么这些string也是绝对的。

recursion查找某个目录下的所有文件夹:

 Dir.glob 'certain_directory/**/*/' 

非recursion版本:

 Dir.glob 'certain_directory/*/' 

注意: Dir.[]工作方式与Dir.glob类似。

你可以使用File.directory?FileTest模块找出一个文件是否是一个目录。 把这个和Dir.entries结合Dir.entries就是一个很好的(ish)线程:

 directory = 'some_dir' Dir.entries(directory).select { |file| File.directory? File.join(directory, file} 

编辑:根据ScottD的更正更新。

 directory = 'Folder' puts Dir.entries(directory).select { |file| File.directory? File.join(directory, file)} 
 Dir.glob('/your_dir').reject {|e| !File.directory?(e)} 
 $dir_target = "/Users/david/Movies/Camtasia 2/AzureMobileServices.cmproj/media" Dir.glob("#{$dir_target}/**/*").each do |f| if File.directory?(f) puts "#{f}\n" end end 

我认为你可以testing每个文件,看看它是否与FileTest.directory? (file_name)目录FileTest.directory? (file_name) FileTest.directory? (file_name) 。 有关更多信息,请参阅FileTest的文档 。

只search当前目录:

 Dir.glob(File.join("target_directory", "*#{File::Separator}")) 

recursionsearch当前目录:

 Dir.glob(File.join("target_directory", "**", "*#{File::Separator}")) 

基本上这查找以目录分隔符结尾的文件。

对于您可能想要使用的通用解决scheme

 Dir.glob(File.expand_path(path)) 

这将与~/*/ (主目录中的所有文件夹)path一起工作。