M1 Mac上grep使用--exclude-dir大括号语法排除目录失效问题
问题原因
该问题由macOS默认搭载的BSD版本grep的语法特性导致:
- 你使用的单元素大括号写法
--exclude-dir={node_modules}不会被shell做展开处理,实际传入grep的排除目录名为{node_modules},和实际存在的node_modules目录名称不匹配,自然无法触发排除规则。 - BSD grep本身不支持
--exclude-dir={dir1,dir2}这类批量声明的大括号语法,该语法是Linux平台GNU grep的特有兼容特性。
可行解决方案
- 单个目录排除直接使用无大括号写法即可,也就是你一开始可以正常运行的写法:
grep -Rl "/Logo" . --exclude-dir=node_modules
- 多目录排除需要重复声明
--exclude-dir参数:
# 同时排除node_modules、dist两个目录的正确写法 grep -Rl "/Logo" . --exclude-dir=node_modules --exclude-dir=dist
- 如果习惯GNU grep的语法,可通过homebrew安装GNU版本的grep,安装后可通过
ggrep命令调用,完全兼容大括号写法:
# 安装GNU grep brew install grep # 调用ggrep即可使用大括号批量排除的语法 ggrep -Rl "/Logo" . --exclude-dir={node_modules,dist}
内容的提问来源于stack exchange,提问作者snu
相关产品推荐
相关产品推荐

