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 les utiliser find Commande pour rechercher récursivement les noms de répertoire et afficher les correspondances.

Répertoires de recherche

Ce find La commande est utilisée pour rechercher des répertoires sous Linux. Par défaut, il est entièrement récursif, donc tous les sous-répertoires sont recherchés pour une correspondance.

Si vous utilisez le -type d Drapeau, find fonctionne en « mode répertoire » et ne recherche que les répertoires, pas les fichiers correspondants. Vous pouvez l’utiliser en parallèle -name Pour rechercher des répertoires par nom :

find . -type d -name "search"

1.JiBnMqyl6S

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

Le problème de l’utilisation -name Il ne correspondra qu’aux noms directs, ce qui signifie qu’il échouera s’il ne correspond pas au nom complet du répertoire. Cependant, vous pouvez utiliser des caractères génériques pour résoudre ce problème, et si vous mettez un caractère générique avant et après la chaîne de recherche, la sous-chaîne correspondra 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 spécifique

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

1.JiBnMqyl6S

Cependant, cela correspond uniquement au nom du répertoire et ignore toujours le répertoire parent. Si vous souhaitez utiliser le chemin d’accès complet au fichier, vous devez utiliser l’option regex décrite ci-dessous.

find imprime une liste de tous les répertoires correspondants, mais vous devez veiller à utiliser systématiquement des chemins absolus ou relatifs, car cela affectera la réponse finale. Lorsque vous utilisez un chemin relatif, comme le point pour « répertoire actuel », les réponses sont relatives. Cependant, si vous spécifiez directement le chemin, même s’il s’agit du répertoire courant, le chemin est absolu et commence à la racine.

1.JiBnMqyl6S

find é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 n’importe quel fichier ou répertoire.

LIÉS ENSEMBLE : Comment utiliser la commande Rechercher sous Linux

Recherche avec regex

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

Un avantage majeur de l’utilisation de regex est qu’il correspondra à l’intégralité du répertoire, y compris les répertoires de base qui le portent.

Vous pouvez utiliser regex avec -regex à la place de -name. Il aide également à allumer sed-Utilisez des expressions régulières compatibles -regextype sed.

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

1.JiBnMqyl6S

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 correspondent à toute sous-chaîne précédente. Ensuite, la barre oblique est masquée par / pour la fin du répertoire, puis un autre caractère générique pour 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 devez vous assurer que le vôtre correspond exactement à ce que vous voulez, ni plus, ni moins.

Utiliser grep avec find

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

find . -type d | grep foo

1.JiBnMqyl6S

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.

LIÉS ENSEMBLE : Comment utiliser la commande grep sous Linux

Le post Comment rechercher récursivement des noms de répertoire sous Linux est apparu en premier sur Germanic News.

gnns-general