如何获得全局路径的顶级路径?

How can I get the top path of glob path?

例如

a/b/c* -> a/b
a/b/c*/*/*b -> a/b

为什么我需要这个是因为我想获得全局文件名的绝对路径。 代码示例:

files, _ := filepath.Glob(p)
top := __magic here__
for _, f := range files {
    abs, _ := filepath.Abs(path.Join(top, f))
    fmt.Println(abs)
}

有没有现成的方法可以达到这个目的?不然就得自己实现了。

编辑

神奇的是首先使 glob 路径 abs,然后是 glob return abs 路径。

filepath.Glob() 返回的文件名已经是绝对的(但请阅读下文)。

看这个例子:

fs, err := filepath.Glob("/dev/../dev/*")
if err != nil {
    panic(err)
}
for _, f := range fs {
    fmt.Println(f, filepath.IsAbs(f))
}

输出:

/dev/null true
/dev/random true
/dev/urandom true
/dev/zero true

Go Playground 上试试。

编辑:

只有在 glob 模式是绝对模式时,返回的文件名才是绝对的。所以最简单的方法就是让glob模式绝对。