Comment grep rechercher des noms de fichiers au lieu de contenu sous Linux
Agence web » Actualités du digital » Comment utiliser grep de manière récursive dans certaines extensions de fichiers

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"

★★★★★