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

grep -r/-R未搜索子文件夹:我的用法存在什么问题?

问题排查与正确用法

你踩的这个坑其实是shell通配符展开和grep递归逻辑的差异导致的,我刚用grep的时候也犯过同样的错 😄

为什么你的命令没生效?

当你输入grep --color -n -r "Thepattern" *.cs时,MINGW64的shell(比如Bash)会先把*.cs展开成当前目录下所有的.cs文件名,然后把这些文件名作为参数传给grep。这时候grep拿到的是一堆具体文件,-r递归参数就完全没发挥作用了——它只会搜索你给的这些文件,不会去遍历子文件夹。

而Windows的findstr /s /i /n "Thepattern" *.cs逻辑不一样:/s参数会让findstr自动递归子目录,同时*.cs是交给findstr自己去匹配所有子目录里的.cs文件,不会被cmd提前展开,所以能正常工作。

正确的grep用法

如果你想递归搜索所有子文件夹里的.cs文件,需要让grep负责文件匹配,而不是交给shell。具体有两种常用写法:

  1. 指定搜索目录+--include过滤文件类型(最推荐)
grep --color -n -r --include="*.cs" "Thepattern" .

这里的.代表从当前目录开始递归,--include="*.cs"告诉grep只搜索后缀为.cs的文件,完美对应你用findstr的需求。

  1. 如果需要排除某些目录/文件
    比如不想搜bin或obj这类编译目录,可以加--exclude-dir:
grep --color -n -r --include="*.cs" --exclude-dir={"bin","obj"} "Thepattern" .

如果要排除特定文件,用--exclude,比如--exclude="*.Designer.cs"。

  1. 忽略大小写的话,加上-i参数
    和findstr的/i效果一样:
grep --color -n -r -i --include="*.cs" "Thepattern" .

额外小提示

如果你习惯了findstr的写法,也可以在MINGW64里继续用findstr——Git的MINGW环境其实也自带了这个命令,用法和Windows cmd里完全一样,不用强行切换grep也能解决问题。

内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:23:03