パターンに一致するサブディレクトリのみを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 'SO-悪をやめる'

回答:


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

@JohnDiblingはい私はあなたが言っていることを正確に更新しました:)
Rahul Patil

後者の提案(grep -R "test" /foo*)は、まさに私が実際に行っていることなので、受け入れます。
John Dibling

これありがとう。私は最初のパターンを使用していますが、それについていくつかのことを理解したい{}と思います。たとえば、エンディングとバックスラッシュは何をしますか?
random_user_name 2018年

これにより、grepに一致する行が提供されますが、データ(データが格納されているファイル)の場所は失われます。それを保持する方法はありますか?
Jontia、

0

試すgrep foo* <other parts>例えば:grep foo* -name "book*"


barという名前のサブディレクトリにあるすべてのファイルでのすべてのインスタンスを探している場合、foo*これは次のようになりgrep --recursive bar ./foo*/*ますか?
John Dibling
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.