gf是一个功能强大的Go语言实现的文件搜索命令行工具,兼具 findgrep 的功能。支持递归搜索指定目录,既可以搜索文件内容,也可以搜索文件名。

功能特性

  • 🔍 文件内容搜索 (-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