如何获得全局路径的顶级路径?
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模式绝对。
例如
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模式绝对。