Comment grep rechercher des noms de fichiers au lieu de contenu sous Linux
Agence web » Actualités du digital » Comment grep rechercher des noms de fichiers au lieu de contenu sous Linux

Comment grep rechercher des noms de fichiers au lieu de contenu sous Linux

grep est un outil Linux généralement utilisé pour rechercher des fichiers texte pour un contenu spécifique. Cependant, il est souvent utile de rechercher des répertoires pour les noms de fichiers au lieu du contenu des fichiers, et cela peut être fait avec grep et d’autres utilitaires de ligne de commande Linux

Utiliser find au lieu de grep

La grep L’utilitaire prend essentiellement une entrée de chaîne à partir de fichiers ou d’une entrée standard et utilise des modèles ou Regex pour effectuer une recherche et imprimer les lignes correspondantes.

Vous pouvez techniquement utiliser grep par lui-même pour rechercher des noms de fichiers au lieu de contenu, mais c’est uniquement parce que Linux autorise les caractères génériques dans les entrées de noms de fichiers. Cependant, vous pouvez tout aussi facilement utiliser ls pour lister les fichiers de cette façon, ou utiliser des caractères génériques dans toute autre commande, et ce n’est pas une vraie solution pour rechercher des noms de fichiers comme comment grep recherche le contenu.

grep "" ./file* -l

La vraie solution est d’utiliser le find , qui peut rechercher dans les sous-répertoires et fournit le moyen le plus résistant de rechercher des fichiers car il interagit directement avec le système de fichiers. Il s’agit de l’utilitaire le plus couramment utilisé pour rechercher dans les répertoires, et il propose de nombreuses options, notamment la correspondance de modèles et la prise en charge des expressions régulières.

L’utilisation la plus basique consiste à utiliser find seul pour imprimer une liste de fichiers, y compris les sous-répertoires, et transmettre cette entrée à grep. Si vous avez déjà des scripts utilisant grepil sera assez facile de les convertir en correspondance de cette façon.

find | grep "file"

Vous pouvez également utiliser des modèles directement avec findéliminant le besoin de grep. Utilisation -iname avec une entrée.

find . -iname 'file_*.txt'

Contrairement à grep Cependant, le find La commande est un peu plus stricte – vous devez utiliser des guillemets simples ou doubles pour échapper à la chaîne de recherche, et vous devez utiliser des caractères génériques pour correspondre à la chaîne entière. Trouver simplement une sous-chaîne dans le nom n’est pas possible sans utiliser des caractères génériques pour faire correspondre le reste du nom.

Utilisation d’expressions régulières (Regex) avec find

Vous pouvez également utiliser des expressions régulières avec findqui permet une correspondance beaucoup plus avancée :

find . -regex './file.*'

Cette expression régulière correspondra à tous les fichiers du répertoire actuel commençant par « fichier ». Cependant, il est important de savoir que cela fonctionne différemment de -iname; l’entrée inclut le chemin d’accès complet au répertoire et doit utiliser ./ pour échapper au chemin relatif, ./.

Cette commande montrée ici exclut le ./subdirectory/ dossier, car il ne commence pas par « fichier ». Pour résoudre ce problème, vous devez faire correspondre tout ce qui précède la barre oblique finale avec .*/:

find . -regex '.*/file.*'

Les expressions régulières sont très compliquées, mais très puissantes. Si vous souhaitez en savoir plus, vous pouvez lire notre guide sur leur fonctionnement.

★★★★★