Comment rechercher des noms de répertoire de manière récursive sous Linux

Comment rechercher des noms de répertoire de manière récursive sous Linux

Sous Linux, tout est stocké dans des répertoires, et lors de l’écriture de scripts bash, il est souvent utile de rechercher les répertoires par leur nom. Heureusement, vous pouvez utiliser find la commande pour rechercher les noms de répertoire de manière récursive et afficher les correspondances.

Rechercher dans les répertoires

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

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

find. -type d -name "search"

Cette commande s’exécute dans le répertoire courant, mais peut également rechercher d’autres répertoires tels que ~.

Le problème avec l’utilisation -name est qu’il ne correspondra qu’aux noms directs, ce qui signifie qu’il ne fonctionnera pas s’il ne correspond pas au nom de répertoire complet. Cependant, vous pouvez utiliser des caractères génériques pour résoudre ce problème, et placer le caractère générique avant et après la chaîne de recherche correspondra à une 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 qui se terminent par une extension spécifique.

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 devez utiliser l’option Regex décrite ci-dessous.

findimprimera une liste de tous les répertoires correspondants, mais vous devez veiller à utiliser des chemins absolus ou relatifs de manière cohérente, car cela affectera la réponse finale. Si vous utilisez un chemin relatif, tel qu’un point pour « répertoire actuel », les réponses seront relatives. Mais si vous spécifiez directement le chemin, même s’il s’agit du répertoire courant, le chemin sera absolu, à partir de 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é -exec pour exécuter des commandes sur chaque fichier ou répertoire.

Recherche avec des expressions régulières

Vous pouvez également utiliser findun filtrage d’expressions régulières (Regex) plus avancé pour trouver des correspondances pour des recherches 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 qui y mènent.

Vous pouvez utiliser Regex -regex au lieu de -name. Il est également utile d’inclure sedune expression régulière compatible avec -regextype sed.

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

Dans cet exemple, l’expression régulière commence par .*one faire correspondre tous les répertoires se terminant par « un ». Le point et le caractère générique correspondront à toute sous-chaîne précédant celle-ci. La barre oblique est ensuite échappée \/ pour correspondre à la fin du répertoire, suivie d’un autre caractère générique pour correspondre à n’importe quel nom de répertoire.

En général, 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 une expression puissante, et vous devez faire attention à ce que votre expression corresponde exactement à ce que vous voulez – ni plus, ni moins.

Utiliser grep avec la recherche

Comme find il peut également générer une liste de répertoires brute, il peut être transmis à d’autres commandes pour traitement. Par exemple, grep utilisé comme utilitaire de recherche de texte et rapidement utilisé 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 complet et peut être utilisé avec des outils tels que les expressions régulières pour améliorer les recherches. Vous pouvez lire notre guide d’utilisation pour en savoir plus.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *