Rechercher des fichiers et des dossiers sous Linux
-
Utilisations de base de la commande
find
dans Bash -
Utilisations avancées de la commande
find
dans Bash
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
- Répertorier les répertoires dans Bash
- Supprimer l'extension de fichier à l'aide de Bash
- Trouver le nombre de lignes d'un fichier dans Linux Bash
- Lire les lignes de fichier dans Bash
- Obtenir le nom et l'extension du fichier à l'aide de Bash