首页 > 解决方案 > 如何将目录结构作为完整的树返回?

问题描述

我有一个这样的目录结构:

reports
├── bar
│   └── 2021-01-25
└── foo
    └── 2021-01-25

我是新手,尝试使用 Walk 功能,

现在我有这个代码

func FilePathWalkDir(root string) ([]string, error) {
    var files []string
    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
        if info.IsDir() {
            if info.IsDir() && info.Name() == "pages" || info.Name() == "data" || info.Name() == "logs" {
                return filepath.SkipDir
            }
            files = append(files, path)
        }
        return nil
    })
    return files, err
}

并像这样使用:

func serve(w http.ResponseWriter, r *http.Request) {

    lines := []string{}
    files, err := FilePathWalkDir("reports/")

    if err != nil {
        panic(err)
    }
    for _, file := range files {
        lines = append(lines, file)
    }

    output, err := json.Marshal(lines)
    if err != nil {
        log.Fatal(err)
    }
    w.Header().Set("Content-Type", "application/json")
    //fmt.Println(string(jsonData))
    fmt.Fprintf(w, string(output))
}

我明白了

"reports/"
"reports/bar"
"reports/bar/2021-01-25"
"reports/foo"
"reports/foo/2021-01-25"

但是想要这个:

"reports/bar/2021-01-25"
"reports/foo/2021-01-25"

但我只想返回每个目录的最后一位(reports/foo/2021-01-27) - 带有日期,它可能是许多不同的日期,就像它可能是许多不同的项目名称(foo、bar、barfoo , foobar 等)。

谁能指出我正确的方向?

标签: go

解决方案


如果您只想要带有日期的路径,为什么不在附加之前使用正则表达式检查后缀是否与该模式匹配?


推荐阅读