dongre1907
2017-11-13 14:23
浏览 38
已采纳

递归查找目录中的文件

I want to find all files matching a specific pattern in a directory recursively (including subdirectories). I wrote the code to do this:

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

Unfortunately, it only searches in /usr/bin, but I also want to search for matches in its subdirectories. How can I achieve this? Thanks.

图片转代码服务由CSDN问答提供 功能建议

我想递归地在目录中找到所有与特定模式匹配的文件(包括子目录)。 我写了代码来做到这一点:

  libRegEx,e:= regexp.Compile(“ ^。+ \\。(dylib)$”)
if e!= nil  {
 log.Fatal(e)
} 
 
files,err:= ioutil.ReadDir(“ / usr / lib”)
if err!= nil {
 log.Fatal(err)
} \  n 
对于_,f:=范围文件{
如果libRegEx.MatchString(f.Name()){
 println(f.Name())
} 
} 
   
 
 

不幸的是,它仅在 / usr / bin 中搜索,但我也想在其子目录中搜索匹配项。 我该如何实现? 谢谢。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • doutan8601 2017-11-13 14:30
    已采纳

    The standard library's filepath package includes Walk for exactly this purpose: "Walk walks the file tree rooted at root, calling walkFn for each file or directory in the tree, including root." For example:

    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)
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题