为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
当年话下 2022-09-05 10:38:33
Golang Glob的行为方式没有达到我的预期。假设我有一个具有以下结构的目录“foo”:foo|-- 1.txt|-- 2.csv|-- 3.json|-- bar`-- baz我想做一个glob,只获取foo中的目录“bar”和“baz”。所以我试试这个: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 模式匹配的目录。我看到GitHub上注意到了同样的问题,但看不到任何解决方法 - 这听起来像是一个错误,一个文档拙劣的功能,或者只是缺乏预期的功能。我已经检查了Go文档中的Match函数,Glob使用,它没有提到任何关于尾部斜杠的内容。所以基本上:有没有一个解决方法,以便我可以使用Glob只用Glob在某个路径下的目录,或者我是否需要使用另一种方法来完成这个任务?
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

您可以循环访问匹配项列表并调用 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)

    }

}


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信