J'ai essayé de rechercher récursivement un modèle dans tous les fichiers .c de la manière suivante
> grep -lr search-pattern *.c
Mais je l'ai comme sortie
> grep: *.c: No such file or directory
Quand j'utilise ceci:
> grep -lr search-pattern *
J'en reçois beaucoup. fichiers c dans les répertoires avec le motif.
Quel est le problème avec l'expression précédente?
--include=GLOB
option. En combinaison avec l'option récursive, c'est très puissant et ne nécessite pasfind
. Agréable!.
sert la fin du commandement.Le
*.c
motif est évalué par votre shell. Il s'applique au répertoire actuel, comme vous le feriez avecls *.c
.Je pense que ce que vous voulez à la place est de trouver tous les fichiers correspondant au
*.c
motif (récursivement) et de vous ygrep
rechercher. Voici une façon de procéder:Il utilise
xargs
pour ajouter les résultats de recherche parfind
.Vous pouvez également utiliser l'
-exec
option pour rechercher, par exemple:De plus, je ne sais pas si vous voulez vraiment l'
-l
optiongrep
. Il s'arrêtera au premier match:la source
find/xargs
pauses de syntaxe sur les noms de fichiers contenant des espaces. La-L
possibilité d'grep
arrêter le premier match de chaque fichier et continuer avec le fichier suivant: si l' on veut seulement voir si le motif est contenu au moins une fois dans chaque fichier donné, il est plus rapide.-print0
option etxargs --null
.Je sais que c'est un fil plutôt ancien, mais puisque j'avais la même question, je veux partager ma façon préférée de parvenir à la même chose, sous une forme beaucoup plus courte.
la source