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

Comment rechercher récursivement des noms de répertoire sous Linux

Tout dans Linux est stocké dans des répertoires, et lors de l’écriture de scripts bash, il est souvent utile de rechercher des répertoires par nom. Heureusement, vous pouvez utiliser le find commande pour rechercher récursivement les noms de répertoire et afficher les correspondances.

Recherche de répertoires

La find La commande est utilisée pour rechercher dans les répertoires sous Linux. Par défaut, il est entièrement récursif, il recherchera donc dans tous les sous-répertoires pour trouver des correspondances.

Si vous utilisez le -type d drapeau, find fonctionnera en « mode répertoire » et ne recherchera que des répertoires, ne correspondant à aucun fichier. Vous pouvez l’utiliser avec -name pour rechercher des répertoires par nom :

find . -type d -name "search"

Cette commande démarre dans le répertoire courant mais peut également rechercher dans d’autres répertoires comme ~.

Le problème de l’utilisation -name est qu’il ne correspondra qu’aux noms directs, ce qui signifie qu’il échouera à moins qu’il ne corresponde au nom complet du répertoire. Vous pouvez cependant utiliser des caractères génériques pour résoudre ce problème, et placer un caractère générique avant et après la chaîne de recherche correspondra à la sous-chaîne n’importe où dans le nom du répertoire. Si vous incluez également des noms de fichiers, vous pouvez utiliser des caractères génériques pour faire correspondre les fichiers se terminant par une extension particulière

find . -type d -name "*search*"

Cependant, cela ne correspondra qu’au nom du répertoire et ignorera toujours le répertoire parent. Si vous souhaitez faire correspondre le chemin d’accès complet au fichier, vous devrez utiliser l’option Regex décrite ci-dessous.

find imprimera une liste de tous les répertoires qui correspondent, mais vous devrez faire attention à vous assurer que vous utilisez des chemins absolus ou relatifs, car cela affectera la réponse finale. Si vous utilisez un chemin relatif, comme le point pour « répertoire courant », les réponses seront relatives. Mais si vous spécifiez le chemin directement, même s’il s’agit du répertoire courant, le chemin sera absolu, commençant à la racine.

find fait également plus qu’une simple recherche de texte – il peut être utilisé pour faire correspondre des fichiers en fonction de l’horodatage, de la taille des fichiers et d’autres identifiants Linux. Il peut également être utilisé avec -exec pour exécuter des commandes sur chaque fichier ou répertoire.

Recherche avec Regex

Vous pouvez également utiliser un filtrage plus avancé avec finden l’utilisant avec des expressions régulières (Regex) pour trouver des correspondances pour des requêtes de recherche complexes.

L’un des principaux avantages de l’utilisation de Regex est qu’il correspondra à l’intégralité du répertoire, y compris les répertoires de base menant à.

Vous pouvez utiliser Regex avec -regex au lieu de -name. Il aide également à allumer sed-compatible Regex utilisant -regextype sed.

trouver . -type d -regextype sed -regex « .*un/.* »

Dans cet exemple, la regex commence par .*one pour correspondre à tous les répertoires se terminant par « un ». Le point et le caractère générique correspondront à toute sous-chaîne menant à ceci. Ensuite, la barre oblique est échappée avec / pour correspondre à la fin du répertoire, puis un autre caractère générique pour correspondre à n’importe quel nom de répertoire.

Dans l’ensemble, cela correspondra à tout répertoire dont le parent se termine par « un », où qu’il se trouve, même dans les sous-répertoires. Regex est puissant, et vous voudrez faire attention à ce que le vôtre corresponde exactement à ce que vous voulez qu’il fasse, ni plus, ni moins.

Utiliser grep avec find

Depuis find peut également générer une liste brute de répertoires, elle peut être redirigée vers d’autres commandes pour traitement. Par exemple, grep est utilisé comme utilitaire de recherche de texte et est rapide à utiliser sur la ligne de commande pour une recherche et une mise en surbrillance simples.

find . -type d | grep foo

grep est également un utilitaire de recherche à part entière et peut être utilisé avec des outils tels que les expressions régulières pour améliorer la recherche. Vous pouvez lire notre guide d’utilisation pour en savoir plus.

★★★★★