终端检索最常见的问题是范围太大:从根目录搜索既慢,也会遇到大量权限错误。先确定工作目录,再决定找文件名还是找文件内容。
按文件名找
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。实验示例与本站运行记录分别说明;原始归档日期保留。
你说的有道理