Comment utiliser grep de manière récursive dans certaines extensions de fichiers
grep
est un excellent outil pour rechercher dans les fichiers et les entrées standard sous Linux et est capable de faire correspondre les modèles de chaîne et Regex. Cependant, il est parfois nécessaire de contrôler les types de fichiers grep
recherche, et il a des drapeaux intégrés pour faire exactement cela.
Inclure uniquement certains fichiers dans les recherches grep
Par défaut, grep
recherchera tous les fichiers dans un dossier donné et ses sous-dossiers si vous l’invoquez avec le récursif -r
drapeau. Cela ramassera tout, mais si vous ne voulez que certaines extensions, l’option que vous voudrez utiliser est --include.
La --include
le drapeau raconte grep
à inclure seulement fichiers correspondant à un certain modèle. Si c’est spécifié, grep
traitera tous les indicateurs d’inclusion comme une liste blanche. Vous pouvez l’utiliser avec n’importe quel caractère glob Linux, comme les caractères génériques pour correspondre à tout, y compris une certaine extension :
grep -inr --include *.txt "foo" ~/folder
Notez que ceci est échappé avec une barre oblique car il est possible que les noms de fichiers contiennent des astérisques. Vous pouvez également spécifier plusieurs
--include
flags, par exemple, en recherchant tous les fichiers source HTML, JS et CSS dans un wwwroot :
grep -inr --include *.html --include *.css --include *.js "foo" ~/folder
De même, vous pouvez également exclure certains noms de fichiers, qui correspondront toujours à tout sauf au glob, agissant comme une liste noire en plus de la configuration existante :
grep -inr --exclude *.txt "foo" ~/folder
Il existe également un indicateur pour exclure des répertoires entiers à la fois :
grep -inr --exclude-dir config "foo" ~/folder
Utiliser la recherche à la place
Alternativement, si vous préférez utiliser le find
utilitaire pour rechercher dans les fichiers, vous pouvez le connecter à grep
à l’aide de tuyaux et xargs
. find
peut effectuer des recherches avec des modèles et Regex, et présente un certain nombre d’avantages, notamment la possibilité de filtrer facilement les fichiers en fonction de métadonnées telles que la taille, la date de création et de modification et d’autres identifiants Linux.
La commande est un peu obtuse, car vous devrez utiliser -print0
au bout du find
pour imprimer une liste d’une seule ligne, puis passez-la à xargs -0
et grep
De là.
find ./ -type f -iname "*.txt" -print0 | xargs -0 grep "foo"