DrJosh9000/zzglob

GitHub: DrJosh9000/zzglob

一个基于状态机的 Go glob 库,提供比标准库更丰富的模式语法和更高效的目录遍历能力。

Stars: 7 | Forks: 1

# zzglob [![Go Reference](https://pkg.go.dev/badge/drjosh.dev/zzglob.svg)](https://pkg.go.dev/drjosh.dev/zzglob) [![构建状态](https://badge.buildkite.com/a5a3787ea61600acc07ae0baa09bd444b4399c72c6115cdc24.svg)](https://buildkite.com/drjosh9000/zzglob) 一个更好的 Go glob 库 ## 目标 * 以确定的顺序进行 Glob,就像 `fs.WalkDir` 那样。 * 支持像 `?` 和 `*` 这样的经典语法,也支持 诸如 `**`、`{x,y,z}`、`[abc]` 和 `[^abc]` 等现代便捷语法。 * 将 `~` 展开为当前用户的家目录。 * 可选地遍历目录软链接。 * 避免不必要的目录遍历 - 对 `foo*/bar` 进行 glob 匹配时应该只遍历以 `foo` 开头的目录, 而不是其他目录。 * 将遍历错误(例如权限错误)传递给 回调函数。 * 支持对任何 `io.FS` 进行 glob 匹配,而不仅限于 宿主文件系统。 * 支持在 Windows 上默认使用 Windows 风格的 路径进行 glob 匹配。 此外,实现代码不应完全难以理解。它基于 状态机,并且我已经尝试清晰地将各个解析阶段分离开来。 你可以将模式转换为 GraphViz 格式,然后通过调用 `Pattern.WriteDot` 将其转换为图表。`zzglob` 包含了一个名为 `zzdot` 的工具, 它可以为你完成这项工作,例如: ``` go run ./cmd/zzdot '[abcd]{*g,h*,i/j}/**/k' | dot -Tsvg > example.svg ``` ![Example.svg](https://static.pigsec.cn/wp-content/uploads/repos/cas/d6/d6005571f84a1cf64381cc3be2ee28c65086d9401c137124261ebf6e27616adc.svg) ## 进行中 * ⌚️ 改进测试。 * 🧠 添加对 [更多语法](https://www.digitalocean.com/community/tools/glob)的支持 ## 模式语法 * `\` - 用于转义模式中的下一个字符。`\x` 匹配 `x`,`\*` 匹配 `*`。 * `/` - 路径分隔符。分隔每个路径的片段。 仅匹配它自身。 * `?` - 精确匹配一个字符,不包含 `/`。 * `*` - 匹配零个或多个字符,不包含 `/`。 * `**` - 匹配零个或多个字符,包含 `/`。由于它可以用于 表示零个或多个路径组件,因此 `/**/` 也能匹配 `/`。 * `{a,b,c}` - 匹配 `a` 或 `b` 或 `c`。组件可以为空,例如 `{,a,b}` 匹配空字符串、`a` 或 `b`。多个路径片段、`*`、`**` 等 在 `{}` 内都是允许的。要在 `{}` 内指定包含 `,` 的路径, 请对其进行转义(`\,`)。 * `[abc]` - 匹配单个字符(`a` 或 `b` 或 `c`)。`[]` 是一种比 `{}` 更简短的单字符匹配写法。 * `~` - 展开为当前用户的家目录。 每个语法元素都可以在调用 `Parse` 时单独启用或禁用,并且正斜杠和反斜杠的含义可以互换 (在 Windows 上默认启用): ``` pattern, err := zzglob.Parse(`C:\Windows\Media\*.mid`, zzglob.ExpandTilde(false), zzglob.SwapSlashes(true), zzglob.AllowEscaping(false), ) ``` 类似地,可以将软链接遍历、斜杠转换和自定义的 `fs.FS` 传递给 `Glob`: ``` err := pattern.Glob(myWalkDirFunc, zzglob.TraverseSymlinks(false), zzglob.TranslateSlashes(true), zzglob.WithFilesystem(os.DirFS("/secrets/")), ) ```
标签:EVTX分析, Glob, Go, Ruby工具, SOC Prime, 开发工具, 文件系统, 日志审计, 路径匹配