开源命令行gf
gf是一个功能强大的Go语言实现的文件搜索命令行工具,兼具 find 和 grep 的功能。支持递归搜索指定目录,既可以搜索文件内容,也可以搜索文件名。
功能特性
- 🔍 文件内容搜索 (
-f): 递归搜索目录,查找文件内容包含指定字符串的文件,并输出文件路径、行号和匹配行内容 - 📁 文件名搜索 (
-g): 递归搜索目录,查找文件名包含指定字符串的文件,并输出文件路径 - 🚀 高性能: 使用Go语言实现,搜索速度快
- 🛡️ 错误处理: 自动跳过无法访问的文件和目录,确保搜索过程稳定可靠
- 📊 版本信息: 支持查看版本号、构建时间和Git提交信息
安装
方法一:使用 go install(推荐)
下载最新的release包
方法二:使用 go install(推荐)
如果你已经安装了 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 .
使用 Makefile
make env //only run once when first build
make build
使用方法
基本语法
gf -g "pattern" <目录> # 文件内容搜索
gf -f "pattern" <目录> # 文件名搜索
gf -v # 显示版本信息
文件内容搜索 (-g)
递归搜索指定目录,查找文件内容包含指定字符串的文件:
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"
文件名搜索 (-f)
递归搜索指定目录,查找文件名包含指定字符串的文件:
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/log