質問

どうやっていけばいいですか?一覧のフォルダに存在する一定のディレクトリをルビー?

Dir.entries() 見ありがわからないのに限定するフォルダのみです。

役に立ちましたか?

解決

ヨルダンは近いですが、を期待しDir.entriesフルパスをFile.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}

これは、現在のディレクトリ内のすべてのフォルダ、除外...を取得します。

フォルダを再帰的にするには、単に**の代わりに*を使用します。

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が絶対的だった場合、

、これらの文字列は、あまりにも絶対的です。

再帰的に特定のディレクトリの下にあるすべてのフォルダを見つけます:

Dir.glob 'certain_directory/**/*/'

非再帰バージョン:

Dir.glob 'certain_directory/*/'

注意:Dir.[]Dir.globのように動作します。

あなたは、ファイルがディレクトリであるかどうかを調べるためにFile.directory?モジュールからFileTestを使用することができます。 Dir.entriesでこれを組み合わせること素敵な1(ISH)-linerになります:

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)}

この1で、あなたはあなたののディレクトリの、のサブディレクトリの、のsubsubdirectories のを完全なパスの配列を取得することができます>再帰的な方法インチ 私はconfig/applicationファイル内の熱心な負荷にこれらのファイルをそのコードを使用します。

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

また、私たちはもう退屈...との契約は必要ありません。受け入れ答えはそれらに対処する必要がありました。

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

あなたはおそらく使用する一般的な解決のために、

Dir.glob(File.expand_path(path))

このは~/*/のようなパス(ホームディレクトリ内のすべてのフォルダ)で動作します。

フォルダのみ(と '..' 除外されている ''):

Dir.glob(File.join(path, "*", File::SEPARATOR))

フォルダとファイルます:

Dir.glob(File.join(path, "*"))

私はあなたがそれがFileTest.directory? (file_name)のディレクトリがあるかどうかを確認するために、各ファイルをテストすることができると思います。詳細はファイルテストのドキュメントnoreferrer">

できませ 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 }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top