一个功能强大的Go语言实现的文件搜索命令行工具,兼具 find 和 grep 的功能。支持递归搜索指定目录,既可以搜索文件内容,也可以搜索文件名。
- 🔍 文件内容搜索 (
-f): 递归搜索目录,查找文件内容包含指定字符串的文件,并输出文件路径、行号和匹配行内容 - 📁 文件名搜索 (
-g): 递归搜索目录,查找文件名包含指定字符串的文件,并输出文件路径 - 🚀 高性能: 使用Go语言实现,搜索速度快
- 🛡️ 错误处理: 自动跳过无法访问的文件和目录,确保搜索过程稳定可靠
- 📊 版本信息: 支持查看版本号、构建时间和Git提交信息
下载最新的release包
如果你已经安装了 Go 1.22 或更高版本,可以直接使用 go install 命令安装:
go install github.com/panyingyun/gf@latest安装完成后,确保 $GOPATH/bin 或 $HOME/go/bin 在你的 PATH 环境变量中,然后就可以直接使用 gz 命令了。
确保已安装 Go 1.22.5 或更高版本:
git clone https://github.com/panyingyun/gf.git
cd gf
go build -o gf .make env //only run once when first build
make buildgf -g "pattern" <目录> # 文件内容搜索
gf -f "pattern" <目录> # 文件名搜索
gf -v # 显示版本信息递归搜索指定目录,查找文件内容包含指定字符串的文件:
gf -g "abc" /输出格式:文件路径:行号:匹配行内容
示例输出:
/home/user/project/main.go:10:func main() {
/home/user/project/main.go:25: fmt.Println("abc")
/home/user/project/utils.go:5:const abc = "test"
递归搜索指定目录,查找文件名包含指定字符串的文件:
gf -f "test" /home/user/project输出格式:文件路径
示例输出:
/home/user/project/test.go
/home/user/project/test_utils.go
/home/user/project/tests/test_helper.go
gf -v输出示例:
gf v1.0.0, build at 2024-01-01T12:00:00+0800, commit abc1234
# 搜索包含 "handleRequest" 函数的所有文件
gf -g "handleRequest" ./src# 查找所有包含 "config" 的文件名
gf -f "config" /etc# 搜索包含 "TODO" 注释的文件
gf -g "TODO" ./project# 查找所有日志文件
gf -f "log" /var/loggf/
├── main.go # 主程序入口
├── go.mod # Go模块定义
├── Makefile # 构建脚本
├── .goreleaser.yml # GoReleaser配置
├── LICENSE # 许可证文件
├── README.md # 项目说明文档
└── docs/ # 文档目录
└── 实现go搜索命令行工具.md
- Go 1.22.5 或更高版本
# 安装依赖
go mod tidy
# 格式化代码
gofumpt -l -w .
# 运行程序
go run main.go -f "pattern" <目录># 使用 Makefile 构建
make build
# 或直接使用 go build
go build -o gf .程序会自动处理以下情况:
- 目录不存在:显示错误信息并退出
- 文件权限不足:跳过无法访问的文件,继续搜索
- 文件读取错误:跳过有问题的文件,继续搜索
- 无效参数:显示使用说明
详见 LICENSE 文件。
欢迎提交 Issue 和 Pull Request!
如果你觉得 gf 软件对你有帮助,欢迎请作者喝一杯咖啡 ☕

