2017-11-13 28 views
0

ディレクトリ内の特定のパターンに一致するすべてのファイル(サブディレクトリを含む)を再帰的に検索したい。私はこれを行うためのコードを書いた:ディレクトリ内のファイルを再帰的に検索する

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()) 
    } 
} 

は残念ながら、それだけで/usr/binで検索し、私もそのサブディレクトリ内の一致を検索したいです。どうすればこれを達成できますか?ありがとう。

+9

https://golang.org/pkg/path/filepath/#Walkを使用してください。 – Volker

答えて

6

標準ライブラリのfilepathパッケージには、正確にこの目的のために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) 
} 
関連する問題