微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法只使用 Golang Glob 列出目录?

如何解决有没有办法只使用 Golang Glob 列出目录?

Golang Glob 的行为不像我预期的那样。假设我有一个具有以下结构的目录“foo”:

foo
|-- 1.txt
|-- 2.csv
|-- 3.json
|-- bar
`-- baz

我想做一个获取 foo 中的目录“bar”和“baz”的 glob。所以我试试这个:

path = "foo/*/"
matches,err := filepath.Glob(path)
if err != nil {
    log.Fatal(err)
}
fmt.Println(matches)

这不会产生匹配:

[]

如果我删除最后一个斜杠并将路径更改为 "foo/*",我会同时获得文件和目录,这不是我想要的结果:

[foo/1.txt foo/2.csv foo/3.json foo/bar foo/baz]

我希望如果存在尾随斜杠,Glob 将仅返回与 glob 模式匹配的目录。我发现 noted on GitHub 存在相同的问题,但找不到任何解决方法 - 这听起来像是一个错误、文档不完整的功能,或者只是缺少预期的功能

I've checked the Go docs for the Match function,Glob 使用它,它没有提到任何关于尾部斜杠的内容

所以基本上:是否有一种解决方法,以便我可以使用 Glob 仅对特定路径下的目录进行 glob,或者我是否需要使用另一种方法来完成此任务?

解决方法

您可以遍历匹配项列表并对每个匹配项调用 os.Stat。 os.Stat 返回一个描述文件的 FileInfo 结构,它包括一个名为 IsDir 的方法,用于检查文件是否为目录。 示例代码:

// Note: Ignoring errors.
matches,_ := filepath.Glob("foo/*")
var dirs []string
for _,match := range matches {
    f,_ := os.Stat(match)
    if f.IsDir() {
        dirs = append(dirs,match)
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。