如何使用ruby获取某个目录中存在的文件夹列表?
Dir.entries()
看起来很近,但我不知道如何只限于文件夹。
如何使用ruby获取某个目录中存在的文件夹列表?
Dir.entries()
看起来很近,但我不知道如何只限于文件夹。
Answers:
乔丹(Jordan)接近了,但Dir.entries
没有返回File.directory?
期望的完整路径。试试这个:
Dir.entries('/your_dir').select {|entry| File.directory? File.join('/your_dir',entry) and !(entry =='.' || entry == '..') }
Dir.entries(root).select { |entry| File.directory? File.join(root, entry) and not entry.in? %w[. ..]}
Dir.glob
。
Dir.glob()
其他答案更糟-我强烈建议您这样做,而不是这样做
我发现这更有用且易于使用:
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
**/*
代替*
。
我认为Pathname
比普通字符串更适合文件名。
require "pathname"
Pathname.new(directory_name).children.select { |c| c.directory? }
这将为您提供该目录中所有目录的数组,作为路径名对象。
如果你想串
Pathname.new(directory_name).children.select { |c| c.directory? }.collect { |p| p.to_s }
如果directory_name
是绝对的,那么这些字符串也是绝对的。
Pathname
的是会自动删除.
,..
并且proprietery文件如.DS_Store
我们可以结合Borh的答案和约翰的回答得到一个相当优雅的解决方案的文件夹中获取目录名。
# user globbing to get a list of directories for a path
base_dir_path = ''
directory_paths = Dir.glob(File.join(base_dir_path, '*', ''))
# or recursive version:
directory_paths = Dir.glob(File.join(base_dir_path, '**', '*', ''))
# cast to Pathname
directories = directory_paths.collect {|path| Pathname.new(path) }
# return the basename of the directories
directory_names = directories.collect {|dir| dir.basename.to_s }
我认为您可以测试每个文件,以查看它是否是目录FileTest.directory? (file_name)
。有关更多信息,请参见FileTest的文档。
'.'
(当前目录)和'..'
(当前目录的父目录)。在大多数情况下,您至少要删除这两个。