这个SE 答案让我意识到我可以使用正则表达式和 grep 来排除目录。但使用时它对我不起作用|
:
results=$(grep --color=always -rnF "$searchTerm" . --exclude-dir='.[^.]*|node_modules')
results=$(grep --color=always -rnF "$searchTerm" . --exclude-dir='.[^.]*\|node_modules')
是否有另一种方法来编写此正则表达式,以便排除以句点和 node_modules 开头的目录?
至少对于 GNU grep 来说,
--exclude
似乎期望一个 glob 模式而不是正则表达式 - 您链接问题的答案暗示了其中的内容“请注意,--exclude-dir 的含义对于 pcregrep 和 grep 是不同的。阅读相应的手册以获取详细信息。” 。具体来说:在
man grep
:在
man pcregrep
:至少在 GNU grep 中,
--exclude-dir
如果您想排除多个模式,则可以多次使用:我已将其更改
.[^.]*
为.?*
:..
这是否是意图是没有意义的,因为您正在此处的当前目录中进行搜索(省略默认-r
为.
最新版本的 GNU 的目标文件grep
,除了我发现grep
至少在 GNU 3.11 中,甚至--exclude-dir='*'
失败排除它,所以--exclude-dir='.*'
如果您没有指定任何目标目录,那么该版本就足够了)。..foo
或 的目录...
[^.]
是[!.]
(尽管[^.]
至少在 GNU 系统上通常也受支持)。为什么不使用
find
?最后: