You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux如何递归查找文件名及内容均含指定字符串的文件

原命令失效原因

你之前执行的grep -r content_string /dir/*name_string*拿不到预期结果,核心问题是shell会在grep运行前先展开/dir/*name_string*通配符:这个规则只会匹配/dir根目录下文件名直接包含name_string的文件和目录,不会递归遍历所有子目录里名字符合要求的文件,搜索范围从一开始就不对。

正确实现方案

方案1:find + grep 组合(全环境兼容)

这个写法符合POSIX标准,在任何类Unix系统的Shell里都能跑,没有特殊依赖:

find /dir -type f -name "*name_string*" -exec grep -l "content_string" {} +

参数说明:

  • -type f:只匹配普通文件,过滤掉目录、软链接、设备文件等特殊文件,避免无效搜索和报错
  • -name "*name_string*":匹配文件名任意位置(开头、中间、末尾)包含name_string的文件,前后的*通配符覆盖所有位置的匹配场景
  • -exec grep -l "content_string" {} +:把find找到的符合文件名规则的文件批量传给grep做内容匹配,-l参数表示只输出匹配到目标内容的文件路径;如果需要看具体匹配的内容行,直接去掉-l参数就行。

方案2:GNU grep 直接递归(Linux发行版通用,写法更简洁)

绝大多数Linux发行版默认带的GNU grep支持--include参数,可以直接过滤文件名做递归搜索,不用配合find:

grep -r -l --include="*name_string*" "content_string" /dir

参数说明:

  • -r:递归遍历指定目录下的所有子目录
  • --include="*name_string*":只在文件名匹配该通配符规则的文件里搜内容,规则会递归生效到所有子目录
  • 同样,要查看具体匹配行就删掉-l参数,需要忽略大小写匹配可以加-i参数,按需调整即可。

内容的提问来源于stack exchange,提问作者Rocco B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:57:51