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.
Sommaire
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 find
en 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.