2009-08-15 4 views
21

Ruby 안에 기존 모듈/함수가 있으면 파일 시스템 디렉토리와 파일을 탐색 할 수 있습니까? 파이썬의 os.walk과 비슷한 것을 찾고있다. 내가 찾은 가장 가까운 모듈은 Find이지만이 트래버스를 수행하려면 추가 작업이 필요합니다.파이썬의 os.walk에 해당하는 루비는 무엇입니까?

파이썬 코드는 다음과 같습니다 :

for root, dirs, files in os.walk('.'): 
    for name in files: 
     print name 
    for name in dirs: 
     print name 

답변

22

다음은 재귀 적으로 모든 파일을 인쇄합니다. 그렇다면 File.directory를 사용할 수 있습니까? 디렉토리인지 파일인지 확인하십시오.

Dir['**/*'].each { |f| print f } 
+9

'디렉터리 [foo는] .each {줄}'는'Dir.glob (foo는) {줄}을 사용할 수 있습니다 '는 임시 배열을 먼저 만들지 않고 블록과 일치하는 모든 파일을 반복합니다. – sepp2k

+0

은'Dir.foreach ('.') {| f | print f}'같은거야? [] 버전보다 표현력이 좋습니다. –

+1

@Thierry : 아니요. Dir.foreach는 하위 디렉토리에 들어 가지 않습니다. – sepp2k

8

Find는 나에게 아주 간단 보인다

대신
require "find" 
Find.find('mydir'){|f| puts f} 
+0

그리고'Find '가 어디에 정의되어 있습니까? 'require "find"' 다음은 문서입니다 : http://www.ruby-doc.org/stdlib-1.9.3/libdoc/find/rdoc/Find.html – Sukima

3
require 'pathname' 

def os_walk(dir) 
    root = Pathname(dir) 
    files, dirs = [], [] 
    Pathname(root).find do |path| 
    unless path == root 
     dirs << path if path.directory? 
     files << path if path.file? 
    end 
    end 
    [root, files, dirs] 
end 

root, files, dirs = os_walk('.') 
관련 문제