如何在find命令中同时匹配.md与.adoc文件执行grep检索
正确的find命令写法
find . \( -iname "*.md" -or -iname "*.adoc" \) -exec grep -I "foo" {} \;
注意事项
- 之前写法失效的核心原因是find命令的运算符优先级问题:
-or的优先级低于-exec,如果不把两个文件名匹配规则用括号包裹为同一个逻辑组,-exec只会作用于最后一个匹配条件 - 括号需要加反斜杠
\转义,避免被shell识别为自身的语法符号 - 也可以用
-o代替-or,二者功能完全一致,写法更短:find . \( -iname "*.md" -o -iname "*.adoc" \) -exec grep -I "foo" {} \;
更简洁的替代方案(无需find)
如果你不需要使用find的其他过滤规则,直接用grep自带的递归检索参数就能实现相同需求,写法更简单:
grep -I -r --include="*.md" --include="*.adoc" "foo" .
-r代表递归检索当前目录下的所有文件- 可以添加多个
--include参数指定需要检索的文件后缀规则
内容的提问来源于stack exchange,提问作者Marek Stepanek
相关产品推荐
相关产品推荐

