94

ruby で特定のディレクトリに存在するフォルダの一覧を取得するにはどうすればよいですか?

Dir.entries()近くに見えますが、フォルダーのみに制限する方法がわかりません。

4

13 に答える 13

113

これはより便利で使いやすいことがわかりました:

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
于 2011-05-30T20:20:49.430 に答える
74

Jordan は近いですが、期待するDir.entries完全なパスを返しません。File.directory?これを試して:

 Dir.entries('/your_dir').select {|entry| File.directory? File.join('/your_dir',entry) and !(entry =='.' || entry == '..') }
于 2009-12-14T06:02:02.260 に答える
48

私の意見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、これらの文字列も絶対です。

于 2009-12-14T09:27:20.847 に答える
4
directory = 'Folder'
puts Dir.entries(directory).select { |file| File.directory? File.join(directory, file)}
于 2009-12-14T09:05:24.000 に答える
4

モジュールから使用File.directory?してFileTest、ファイルがディレクトリかどうかを調べることができます。これを組み合わせるとDir.entries、素敵な(っぽい)ライナーになります:

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

編集: ScottDの修正ごとに更新。

于 2009-12-14T05:34:02.687 に答える
1
Dir.glob('/your_dir').reject {|e| !File.directory?(e)}
于 2013-08-26T18:16:56.180 に答える
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
于 2014-05-15T10:00:02.137 に答える
0

各ファイルをテストして、FileTest.directory? (file_name). 詳細については、FileTest のドキュメントを参照してください。

于 2009-12-14T05:32:06.200 に答える