获取目录中的文件夹列表

0xC*_*ACE 87 ruby directory directory-listing

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

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

Emi*_*ggi 103

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

Dir.chdir('/destination_directory')
Dir.glob('*').select {|f| File.directory? f}
Run Code Online (Sandbox Code Playgroud)

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

递归文件夹只需用来**代替*.

Dir.glob行也可以Dir.chdir作为块传递给:

Dir.chdir('/destination directory') do
  Dir.glob('*').select { |f| File.directory? f }
end
Run Code Online (Sandbox Code Playgroud)

  • 要递归文件夹,你需要使用`**/*`代替`*`. (16认同)

sco*_*ttd 69

乔丹很接近,但Dir.entries没有回到File.directory?预期的完整路径.试试这个:

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

  • 请注意,这将获得*all*目录,包括隐藏的目录以及`'.'`(当前目录)和`'..'`(当前目录的父目录).在大多数情况下,您希望至少删除这两个. (3认同)

joh*_*nes 45

在我看来Pathname,比普通字符串更适合文件名.

require "pathname"
Pathname.new(directory_name).children.select { |c| c.directory? }
Run Code Online (Sandbox Code Playgroud)

这将为您提供该目录中所有目录的数组作为Pathname对象.

如果你想要字符串

Pathname.new(directory_name).children.select { |c| c.directory? }.collect { |p| p.to_s }
Run Code Online (Sandbox Code Playgroud)

如果directory_name是绝对的,这些字符串也是绝对的.

  • 更简洁:Pathname.new(somepath).children.select(&:directory?) (3认同)

Boh*_*ohr 20

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

Dir.glob 'certain_directory/**/*/'
Run Code Online (Sandbox Code Playgroud)

非递归版本:

Dir.glob 'certain_directory/*/'
Run Code Online (Sandbox Code Playgroud)

注意:Dir.[]Dir.glob.


Vic*_*tor 6

有了这个,您可以以递归方式获取目录、子目录子目录的完整路径数组。我使用该代码将这些文件加载​​到文件中。config/application

Dir.glob("path/to/your/dir/**/*").select { |entry| File.directory? entry }
Run Code Online (Sandbox Code Playgroud)

此外,我们不再需要处理无聊的事情...。接受的答案需要处理它们。