루비가있는 특정 디렉토리에 존재하는 폴더 목록을 어떻게 얻습니까?
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 }
또한 우리는 지루한 다룰 필요가 없습니다 .및 ..더 이상. 그 (것)들을 다루기 위하여 받아 들여진 대답이 필요했습니다.
