答案:一个用Golang编写的命令行工具,支持递归搜索指定目录下的文件,可按文件名模糊匹配(支持通配符),通过-path和-name参数指定搜索路径和模式,使用filepath.WalkDir遍历目录,filepath.Match进行模式匹配,输出符合条件的文件路径,具备错误处理机制,可扩展忽略大小写、排除目录、正则匹配和输出格式控制等功能。

你想要一个用 Golang 编写的命令行工具,能够递归搜索指定目录中的文件。下面是一个完整的实现,支持按文件名模糊匹配,并可通过命令行参数控制搜索路径和模式。
功能特点:
递归遍历目录支持通配符(如 *.go)可通过命令行传入路径和匹配模式输出匹配的文件路径
代码实现(search.go)
“`gopackage main
import (“flag””fmt””io/fs””os””path/filepath””strings”)
func main() {// 定义命令行参数var (rootDir = flag.String(“path”, “.”, “要搜索的根目录”)pattern = flag.String(“name”, ““, “文件名匹配模式,支持 和 ?”))flag.Parse()
// 验证目录是否存在info, err := os.Stat(*rootDir)if err != nil || !info.IsDir() { fmt.Fprintf(os.Stderr, "错误:目录不存在或不可读: %sn", *rootDir) os.Exit(1)}// 遍历目录err = filepath.WalkDir(*rootDir, func(path string, d fs.DirEntry, err error) error { if err != nil { // 出错时跳过,继续搜索其他路径 fmt.Fprintf(os.Stderr, "访问路径出错: %s, 错误: %vn", path, err) return nil } if d.IsDir() { return nil // 不对目录进行匹配 } matched, err := filepath.Match(*pattern, d.Name()) if err != nil { fmt.Fprintf(os.Stderr, "模式格式错误: %vn", err) return err } if matched { fmt.Println(path) } return nil})if err != nil { fmt.Fprintf(os.Stderr, "搜索过程中发生错误: %vn", err) os.Exit(1)}
}
;toolbar:false;’>
使用方法
1. 编译程序
在终端执行:
“`bashgo build -o search search.go“`
2. 常见用法示例
立即学习“go语言免费学习笔记(深入)”;
“`bash# 搜索当前目录下所有 .go 文件./search -path . -name “*.go”# 搜索指定目录下以 main 开头的文件./search -path /home/user/project -name “main*”# 搜索所有 .txt 文件./search -name “*.txt”# 搜索文件名包含 test 的 go 文件./search -name “*test*.go”“`
扩展建议
你可以根据需要添加以下功能:
- 忽略大小写:使用
strings.ToLower转换文件名和模式 - 排除目录:在
WalkDir回调中检查路径是否包含/node_modules或/.git - 正则匹配:用
regexp包替换filepath.Match - 输出格式控制:添加
-q静默模式或-l统计数量
基本上就这些。这个工具轻量、高效,适合集成到脚本或进一步封装为更复杂的文件查找工具。
以上就是开发一个Golang命令行工具来递归搜索目录中的文件的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1402223.html
微信扫一扫
支付宝扫一扫