Net*_*ire 2 recursion search file go
我想以递归方式查找与目录中特定模式匹配的所有文件(包括子目录).我写了代码来做到这一点:
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())
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它只搜索/usr/bin,但我也想在其子目录中搜索匹配项.我怎样才能做到这一点?谢谢.
标准库的filepath包Walk正是出于这个目的:"遍历以root为根的文件树,为树中的每个文件或目录调用walkFn,包括root." 例如:
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)
}
Run Code Online (Sandbox Code Playgroud)
小智 8
从 Go 1.16(2021 年 2 月)开始,您可以使用filepath.WalkDir:
package main
import (
"io/fs"
"path/filepath"
)
func walk(s string, d fs.DirEntry, e error) error {
if e != nil { return e }
if ! d.IsDir() {
println(s)
}
return nil
}
func main() {
filepath.WalkDir("..", walk)
}
Run Code Online (Sandbox Code Playgroud)
https://golang.org/pkg/path/filepath#WalkDir