获取目录中的文件夹列表
如何使用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一起工作。