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