如何使用ruby获取某个目录中存在的文件夹列表?
Dir.entries()
看起来很近但我不知道如何限制文件夹。
答案 0 :(得分:98)
我发现这更有用且易于使用:
Dir.chdir('/destination_directory')
Dir.glob('*').select {|f| File.directory? f}
它获取当前目录中的所有文件夹,排除.
和..
。
要递归文件夹,只需使用**
代替*
。
Dir.glob
行也可以作为块传递给Dir.chdir
:
Dir.chdir('/destination directory') do
Dir.glob('*').select { |f| File.directory? f }
end
答案 1 :(得分:64)
Jordan很接近,但Dir.entries
没有返回File.directory?
期望的完整路径。试试这个:
Dir.entries('/your_dir').select {|entry| File.directory? File.join('/your_dir',entry) and !(entry =='.' || entry == '..') }
答案 2 :(得分:44)
在我看来,Pathname
比普通字符串更适合文件名。
require "pathname"
Pathname.new(directory_name).children.select { |c| c.directory? }
这为您提供了该目录中所有目录的数组作为Pathname对象。
如果你想要字符串
Pathname.new(directory_name).children.select { |c| c.directory? }.collect { |p| p.to_s }
如果directory_name
是绝对的,那么这些字符串也是绝对的。
答案 3 :(得分:20)
递归查找某个目录下的所有文件夹:
Dir.glob 'certain_directory/**/*/'
非递归版本:
Dir.glob 'certain_directory/*/'
注意:Dir.[]
的作用类似于Dir.glob
。
答案 4 :(得分:4)
您可以使用File.directory?
模块中的FileTest
来确定文件是否是目录。将它与Dir.entries
结合起来可以得到一个很好的(ish)-liner:
directory = 'some_dir'
Dir.entries(directory).select { |file| File.directory? File.join(directory, file}
编辑:根据ScottD的更正进行了更新。
答案 5 :(得分:4)
directory = 'Folder'
puts Dir.entries(directory).select { |file| File.directory? File.join(directory, file)}
答案 6 :(得分:1)
Dir.glob('/your_dir').reject {|e| !File.directory?(e)}
答案 7 :(得分:1)
$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
答案 8 :(得分:1)
对于通用解决方案,您可能希望使用
Dir.glob(File.expand_path(path))
这适用于~/*/
之类的路径(主目录中的所有文件夹)。
答案 9 :(得分:1)
仅排除文件夹('。'和'..'):
protected $primaryKey = 'user_menu_id';
文件夹和文件:
Dir.glob(File.join(path, "*", File::SEPARATOR))
答案 10 :(得分:1)
有了这个,您可以获取到目录,子目录,子子目录完整路径的数组>以递归的方式。
我使用该代码渴望将这些文件加载到config/application
文件中。
Dir.glob("path/to/your/dir/**/*").select { |entry| File.directory? entry }
此外,我们不再需要处理无聊的.
和..
。接受的答案需要对付它们。
答案 11 :(得分:0)
我认为您可以测试每个文件以查看它是否是FileTest.directory? (file_name)
的目录。有关详细信息,请参阅the documentation for FileTest。
答案 12 :(得分:0)
我们可以将Borh's answer和johannes' answer结合起来,以获得将目录名称放在文件夹中的优雅解决方案。
db.collection("samyata")
.document(mAuth.getuid.toString())
.collection("wallet")
.document(mAuth.getuid.toString())
.setData(dataToSave);