登录
首页 >  Golang >  Go问答

如何高效地查找所有目录中与特定后缀匹配的所有文件?

来源:stackoverflow

时间:2024-04-22 21:09:33 385浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何高效地查找所有目录中与特定后缀匹配的所有文件?》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我需要递归地查找目录中的所有文件,该目录也可以有很多子目录。我想知道是否有什么方法只能给我 *.json 文件? 我有下面的方法,它可以完成这项工作,并在所有目录中递归地为我提供所有文件,但我不确定在这里使用 hassuffix 是否正确。我是 golang 新手,所以我不确定是否有更好或更有效的方法来做到这一点。

func WalkDir(root string) ([]string, error) {
    var files []string
    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
        if !info.IsDir() && strings.HasSuffix(path, "json") {
            files = append(files, path)
        }
        return nil
    })
    return files, err
}

另外,我如何修改上述方法,以便它可以为我提供与 *.json*.txt 后缀匹配的所有文件。基本上它应该能够使用后缀数组并给我匹配的所有文件。执行此操作的有效方法是什么?


正确答案


您可能希望确保点 (.) 也出现在文件后缀之前。

此外,正如 @maxm 所指出的,根据 the docswalkdir 是首选:

walk 的效率低于 go 1.16 中引入的 walkdir,后者 避免在每个访问的文件或目录上调用 os.lstat。

要检查多个后缀的匹配,您可以尝试:

func walkdir(root string, exts []string) ([]string, error) {
    var files []string
    err := filepath.walkdir(root, func(path string, d fs.direntry, err error) error {
        if d.isdir() {
            return nil
        }

        for _, s := range exts {
            if strings.hassuffix(path, "."+s) {
                files = append(files, path)
                return nil
            }
        }

        return nil
    })
    return files, err
}

并使用:

files, err := WalkDir("/home", []string{"json", "txt"})

以上就是《如何高效地查找所有目录中与特定后缀匹配的所有文件?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>