Rechercher des fichiers et des dossiers sous Linux

Niraj Menon 30 janvier 2023
  1. Utilisations de base de la commande find dans Bash
  2. Utilisations avancées de la commande find dans Bash
Rechercher des fichiers et des dossiers sous Linux

Que faites-vous lorsque vous êtes sur la ligne de commande Bash et que vous avez besoin de trouver un type de fichier spécifique ou un dossier commençant par un certain nom, à un emplacement spécifié ? La commande find peut vous aider à localiser des fichiers et des dossiers qui peuvent correspondre à un large éventail de critères et, par conséquent, est un puissant utilitaire de ligne de commande sous Linux.

Ce tutoriel expliquera l’utilisation de la commande find dans un contexte de shell Bash, en passant en revue l’utilisation de base, les cas d’utilisation avancés et l’utilisation combinée avec d’autres fonctionnalités du shell Bash.

Utilisations de base de la commande find dans Bash

Une commande find est un outil polyvalent utilisé pour rechercher n’importe quoi, d’un simple fichier à plusieurs fichiers et dossiers qui satisfont aux expressions régulières. Le cas d’utilisation le plus simple, pour rechercher un fichier ou un dossier spécifique dans le répertoire actuel uniquement, peut être réalisé comme suit.

find filename.ext
find foldername

Après avoir exécuté la commande correspondante, leurs noms seront imprimés si le fichier ou le dossier existe.

La commande find peut également rechercher dans le répertoire, en entrant dans des sous-répertoires pour trouver le fichier ou le dossier spécifié. Supposons que nous ayons de nombreux fichiers nommés test dispersés dans des dossiers de notre répertoire actuel.

Pour voir où ils se trouvent, nous pouvons taper ce qui suit.

find . -name test -type f

Le code doit renvoyer les chemins vers tous les fichiers nommés test dans le répertoire et les sous-répertoires en cours. L’utilisation du paramètre -type f garantit que nous n’attrapons pas les répertoires également nommés test - si vous êtes programmeur, vous en avez forcément beaucoup.

Le paramètre -name est explicite, mais si vous souhaitez une insensibilité à la casse lors de la recherche du nom spécifié pour détecter des noms tels que tEST, Test ou TeST, nous pouvons utiliser le paramètre -iname à la place, où i se trouve pour insensible.

Bash globs n’est pas strictement lié à l’utilisation de la commande find. Vous pouvez utiliser un astérisque positionné dans votre modèle dans les cas où vous ne savez peut-être pas quels caractères ou combien d’entre eux existent dans votre modèle.

Par exemple, si vous souhaitez capturer les fichiers suivants : test, test2, test_3, testt1, vous pouvez utiliser un glob pour capturer ces phrases en vous basant sur le fait qu’elles commencent toutes par le mot test.

La commande suivante le fait.

find . -name test*

Le code doit renvoyer tous les fichiers ou répertoires (notez la suppression du paramètre -type f) qui commencent par le mot test.

Utilisations avancées de la commande find dans Bash

Les commandes find peuvent être étendues pour correspondre à différents critères. Si vous souhaitez capturer des fichiers basés sur plusieurs globs ou noms, vous pouvez envisager d’utiliser la fonction -o ou OR.

Par exemple, si vous souhaitez rechercher à la fois des fichiers PDF et Word DOC/DOCX dans un répertoire, vous pouvez le faire avec ce qui suit.

find -iname '*.pdf' -o -iname '*.doc' -o -iname '*.docx'

Des paramètres de nom insensibles pour intercepter les fichiers dont l’extension a été mise en majuscule peuvent être le cas avec certains programmes.

Si vous êtes plus familier avec RegEx, vous pouvez également utiliser un modèle pour spécifier plusieurs critères, en utilisant les paramètres -regex ou -iregex.

Pour capturer les mêmes extensions que ci-dessus et rechercher en plus des fichiers commençant par test, nous pouvons utiliser le modèle suivant :

find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f

L’utilisation de barres obliques inverses pour les caractères Regex spéciaux comme les parenthèses et le symbole pipe empêche Bash de les traiter et passe la chaîne entière directement dans la commande find pour empêcher notre RegEx d’échouer.

Enfin, une discussion sur l’utilisation de la sortie de la commande find - vous pouvez compter le nombre d’occurrences des fichiers et dossiers correspondants en vous dirigeant vers wc, qui est un utilitaire de comptage de caractères/mots/lignes.

find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f | wc -l

Vous pouvez enregistrer les données dans une variable à analyser par une commande plus tard dans votre script.

DOCS=$(find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f)

Gardez à l’esprit que des caractères spéciaux, y compris des espaces, des retours à la ligne et des parenthèses, peuvent exister dans les chemins de fichiers, ce qui entraîne un comportement étrange lors du passage d’une telle variable à une commande. Assurez-vous de définir le délimiteur IFS en conséquence lors du traitement de ces données.

La commande find fournit également une exécution de commande par élément similaire à l’opération xargs. Vous pouvez y parvenir en utilisant le paramètre -exec.

Si vous souhaitez obtenir les autorisations pour tous les fichiers et dossiers correspondants, par exemple, vous pouvez le faire en procédant comme suit :

find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f -exec ls -l {} \;

Article connexe - Bash File

Article connexe - Bash Directory