grep仅子目录匹配模式


9

我有一个包含数千个子目录的目录树,但是我经常只需要grep这些目录的一小部分。如何grep仅将那些与模式匹配的子目录?

例如,假设我有一些要在其中进行grep的子目录:

...
...
...
/foo
/fooLib
/fooHandler
/fooGizmo
...
...
...

...上述条目代表的成千上万的其他目录,我的希望到grep英寸

假设我正在寻找的所有实例bar,如果这样做的话:

grep -n --recursive bar *

我会在所有目录中找到所需的内容。如何仅在与模式匹配的子目录中搜索foo*


您只想在/foo和朋友中搜索吗?在/foo/foo/bar/foo/bar/qux等,但不/wibble/foo?在/foo/wibble/foo,但不/foo/bar?在/foo/foo/bar/wibble/foo,但不/elsewhere
吉尔斯(Gilles)'所以

Answers:


11

您可以使用grep并找到以下组合:

find /{foo,fooLib,fooHandler,fooGizmo} -type f -exec grep -l "test" {} \;

或者你可以使用

find /foo* -type f -exec grep -l "test" {} \;

或仅使用grep

grep -R "test" /foo*

我可以在不明确指定子目录的情况下执行此操作吗?而是使用通配符(例如foo*?)。
John Dibling 2013年

@JohnDibling是的,我已经完全更新了您的发言:)
Rahul Patil

后面的建议(grep -R "test" /foo*)正是我现在真正在做的,所以我接受。
John Dibling 2013年

这次真是万分感谢。我使用的是第一种模式,但希望了解一些有关它的内容-例如,结尾{}和反斜杠起什么作用?
random_user_name

这提供了与grep匹配的行,但是数据(它所在的文件)的位置丢失了。有什么办法可以保留吗?
Jontia

0

尝试grep foo* <other parts>例如:grep foo* -name "book*"


如果我要bar在名为的子目录中的所有文件中寻找的所有实例foo*,应该这样grep --recursive bar ./foo*/*吗?
John Dibling 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.