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.
find
imprimera 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 find
un 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 sed
une 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