[ruby] 디렉토리의 폴더 목록 가져 오기

루비가있는 특정 디렉토리에 존재하는 폴더 목록을 어떻게 얻습니까?

Dir.entries() 가까이 보이지만 폴더로만 제한하는 방법을 모르겠습니다.



답변

Jordan은 가깝지만 예상 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 객체로 제공됩니다.

문자열을 갖고 싶다면

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.


답변

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


답변

당신은 사용할 수 있습니다 File.directory?으로부터 FileTest파일이 디렉토리인지 여부를 알아 모듈. 이것을 결합하면 Dir.entries멋진 라이너가됩니다.

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

편집 : ScottD의 수정에 따라 업데이트되었습니다.


답변

이것으로, 당신은 배열을 얻을 수 있습니다 재귀적인 방법 으로 당신의 디렉토리 , subdirectories , subsubdirectories 에 대한 전체 경로 . 이 코드를 사용하여 이러한 파일을 파일 안에로드했습니다 config/application.

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

또한 우리는 지루한 다룰 필요가 없습니다 ...더 이상. 그 (것)들을 다루기 위하여 받아 들여진 대답이 필요했습니다.