似乎Go
是少数语言之一,似乎不理解文件globbing的双星("globstar")语法.至少这似乎没有按预期工作:
filepath.Glob(dir + "/**/*.bundle/*.txt")
Run Code Online (Sandbox Code Playgroud)
我错过了有关filepath
实施的内容吗?是否有一个图书馆支持这个?
该filepath.Glob
实现使用filepath.Match
引擎盖下。原来的规格没有涵盖非常常见的(.gitignore
,zsh
)双星模式。绝不相同-但对于我的用例,我设法通过以下小功能解决了该问题:
func glob(dir string, ext string) ([]string, error) {
files := []string{}
err := filepath.Walk(dir, func(path string, f os.FileInfo, err error) error {
if filepath.Ext(path) == ext {
files = append(files, path)
}
return nil
})
return files, err
}
Run Code Online (Sandbox Code Playgroud)
我仍然愿意通过适当的双星匹配来更好地实施。
我编写了一个支持双星通配符的小型扩展库。有了这个目录结构:
$ find a
a
a/b
a/b/c.d
a/b/c.d/e.f
Run Code Online (Sandbox Code Playgroud)
您可以使用它a/**/*.*
来匹配目录下a
包含点的所有内容,如下所示:
$ find a
a
a/b
a/b/c.d
a/b/c.d/e.f
Run Code Online (Sandbox Code Playgroud)
哪个输出:
$ go run example.go
MATCH: [a/b/c.d]
MATCH: [a/b/c.d/e.f]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3186 次 |
最近记录: |