2017-11-13 3 views
0

디렉토리의 특정 패턴과 일치하는 모든 파일 (서브 디렉토리 포함)을 재귀 적으로 찾고 싶습니다. 나는이 작업을 수행하는 코드 작성 : 불행하게도, 그것은 단지 /usr/bin에서 검색디렉토리의 파일을 반복적으로 찾으십시오.

libRegEx, e := regexp.Compile("^.+\\.(dylib)$") 
if e != nil { 
    log.Fatal(e) 
} 

files, err := ioutil.ReadDir("/usr/lib") 
if err != nil { 
    log.Fatal(err) 
} 

for _, f := range files { 
    if libRegEx.MatchString(f.Name()) { 
     println(f.Name()) 
    } 
} 

, 그러나 나는 또한 하위 디렉터리에서 일치하는 항목을 검색 할. 이것을 어떻게 할 수 있습니까? 감사.

+9

https://golang.org/pkg/path/filepath/#Walk를 사용하십시오. – Volker

답변

6

표준 라이브러리의 filepath 패키지에는 정확하게이 용도로 Walk이 포함되어 있습니다. "Walk는 루트에 루트 된 파일 트리를 탐색하고 루트를 포함하여 트리의 각 파일이나 디렉토리에 대해 walkFn을 호출합니다." 예 :

libRegEx, e := regexp.Compile("^.+\\.(dylib)$") 
if e != nil { 
    log.Fatal(e) 
} 

e = filepath.Walk("/usr/lib", func(path string, info os.FileInfo, err error) error { 
    if err == nil && libRegEx.MatchString(info.Name()) { 
     println(f.Name()) 
    } 
    return nil 
}) 
if e != nil { 
    log.Fatal(e) 
} 
관련 문제