在终端找文件和文本:find、grep、rg 的分工

阿远
2026-10-26 / 1 评论 / 20 阅读 / 正在检测是否收录...

终端检索最常见的问题是范围太大:从根目录搜索既慢,也会遇到大量权限错误。先确定工作目录,再决定找文件名还是找文件内容。

按文件名找

find . -type f -name '*.log'
find /etc -maxdepth 2 -type f -name '*.conf'

. 表示当前目录。单引号保护 *.log,让 find 自己处理模式;不加引号时 Shell 可能先展开。对系统目录搜索时,部分文件不可读是正常现象,不要为了消除报错就给所有文件改权限。

按内容找

grep -Rni --include='*.conf' 'listen' .
rg -n 'listen' .

grep -R 递归搜索,-n 显示行号,-i 忽略大小写。rg 是 ripgrep,若系统没有安装,可先用 grep。rg 默认遵守忽略文件和隐藏文件规则,所以两条命令结果可能不同;排查时先确认搜索范围。

组合时先预览结果

需要对找到的文件做进一步处理时,先只打印文件名,确认范围,再运行后续命令。文件名可能包含空格、换行等字符,不要把 find 输出直接用空格拆开。批量修改或删除之前,务必先在测试目录验证。

参考:GNU find 文档 · GNU grep 文档 · ripgrep 项目

封面插画:unDraw(https://undraw.co/license)。

安全处理特殊文件名

需要逐个处理文件时,优先使用 find . -type f -name '*.log' -exec wc -l -- {} +,由 find 直接传递路径,不把 ls 输出按空格拆开。GNU 工具链也可用 -print0 配合 xargs -0。rg 默认忽略隐藏和忽略规则,只有明确需求时才调整 -uu 等选项;扩大搜索范围可能读到私密文件,分享结果前复核。

内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
1

评论 (1)

取消
  1. 头像
    super
    Windows 10 · Google Chrome

    你说的有道理

    回复