grep uniquement les sous-répertoires correspondant au modèle

9

J'ai une arborescence de répertoires composée de plusieurs milliers de sous-répertoires, mais je n'ai souvent besoin de grep qu'un petit sous-ensemble de ces répertoires. Comment puis-je grepuniquement les sous-répertoires correspondant à un modèle?

Par exemple, supposons que j'ai ces sous-répertoires dans lesquels je veux grep:

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

Les ...entrées ci-dessus représentent les milliers d'autres répertoires dans lesquels je ne veux pas faire de grep.

Supposons que je recherche toutes les instances de bar, si je fais ceci:

grep -n --recursive bar *

Je trouverais ce que je cherche, mais dans tous les répertoires. Comment puis-je rechercher uniquement dans les sous-répertoires correspondant au modèle foo*?

John Dibling
la source
Souhaitez-vous rechercher uniquement dans /fooet amis? Dans /fooet /foo/baret /foo/bar/quxet ainsi de suite , mais pas /wibble/foo? Dans /fooet /wibble/foomais pas /foo/bar? Dans /fooet /foo/baret /wibble/foomais pas /elsewhere?
Gilles 'SO- arrête d'être méchant'

Réponses:

11

Vous pouvez utiliser grep et trouver une combinaison comme ci-dessous:

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

Ou vous pouvez utiliser

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

Ou en utilisant grep uniquement

grep -R "test" /foo*
Rahul Patil
la source
Puis-je le faire sans spécifier explicitement les sous-répertoires? Au contraire, en utilisant un caractère générique tel que foo*?
John Dibling du
@JohnDibling oui j'ai mis à jour exactement ce que vous dites :)
Rahul Patil
La dernière suggestion ( grep -R "test" /foo*) est exactement ce que je fais actuellement, donc j'accepte.
John Dibling du
Merci pour ça. J'utilise le premier modèle, mais j'aimerais comprendre quelques choses à ce sujet - par exemple, que font la fin {}et la barre oblique inverse?
random_user_name
Cela fournit les lignes correspondant à la grep, mais l'emplacement des données (le fichier dans lequel elles se trouvent) est perdu. Y a-t-il un moyen de conserver cela?
Jontia
0

essayez grep foo* <other parts>par exemple:grep foo* -name "book*"

harish.venkat
la source
Si je recherche toutes les instances de bardans tous les fichiers des sous-répertoires nommés foo*, cela devrait-il être comme ceci grep --recursive bar ./foo*/*:?
John Dibling du