首页 > 解决方案 > 递归grep仅匹配模式的目录?

问题描述

我试图弄清楚如何通过仅搜索与字符串匹配的子目录中的文件来加速递归 grep。

例子:

/foo/bar/baz/mylogs/somelog.log
/foo/bar/notme.log
/cat/dog/mylogs/anotherlog.log

我只需要 grep 下的*.log文件*/mylogs/*

我可以使用以下内容找到所有日志文件...

egrep -h -R --include \*.log '(pattherns|to|match)'

但这并不...

egrep -h -R --include \/mylogs/\*.log '(pattherns|to|match)'

如何缩小包含路径?

标签: grep

解决方案


一种选择是使用find查找与该名称匹配的任何目录,并利用其exec标志egrep在找到的内容上运行。以下示例递归地egrep遍历模式 'foo' 的匹配目录:

find . -type d -name mylogs -exec egrep -hR --include=\*.log foo {} +

+后缀意味着将find尽可能多的结果提供给单个egrep进程。


推荐阅读