如何在所有目錄中高效地查找與特定后綴匹配的所有文件?

我需要遞歸地找到一個目錄中的所有文件,這個目錄也可以有很多sub-directories。我想知道是否有什么辦法,它只能給我*.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所指出的,根據文檔,WalkDir是首選的:

Walk的效率低于go1.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"})
主站蜘蛛池模板: 无码少妇A片一区二区三区| 无码AV中文一区二区三区| 久久精品国产一区| 中文字幕一区视频| 日韩一区二区三区精品| 精品无码人妻一区二区三区| 一区二区三区高清视频在线观看| 日韩最新视频一区二区三| 国产在线一区二区| 亚洲一区二区三区乱码A| 国产激情一区二区三区小说| 蜜臀AV在线播放一区二区三区| 亚洲一区无码精品色| 精品国产一区二区三区www| 亚洲综合av一区二区三区不卡| 无码人妻一区二区三区在线| 又硬又粗又大一区二区三区视频 | 久久精品无码一区二区三区| 午夜精品一区二区三区在线观看| 日本一区中文字幕日本一二三区视频 | 日本欧洲视频一区| 伊人久久大香线蕉av一区| 国产一区二区精品久久岳| 无遮挡免费一区二区三区| 国产成人无码精品一区不卡| 男人的天堂av亚洲一区2区| 亚洲AV成人一区二区三区观看 | 秋霞无码一区二区| 久久国产精品一区二区| 性色A码一区二区三区天美传媒| 国产一区二区三区夜色| 国产自产V一区二区三区C| 国产色综合一区二区三区| 久久se精品一区二区国产| 精品aⅴ一区二区三区| 无码人妻久久久一区二区三区| 精品无码AV一区二区三区不卡| 亚洲国产福利精品一区二区| 欧美日韩精品一区二区在线观看| 日韩美女视频一区| 国产在线视频一区|