La commande find
sous Linux est un outil puissant permettant aux administrateurs système de repérer et de manipuler des fichiers et des dossiers en fonction d’une multitude de critères de filtrage. Elle offre la possibilité de localiser des répertoires et des fichiers selon leur nom, leur catégorie, leur extension, leur taille, leurs permissions, et bien d’autres aspects.
Au-delà de la simple localisation de fichiers et de dossiers, l’association de la commande find
avec d’autres commandes ouvre la porte à des actions sur les résultats. L’ajout de l’option -exec
permet aux administrateurs d’exécuter des commandes externes et de réaliser des opérations telles que la copie, le déplacement, la suppression ou la modification des autorisations des fichiers correspondant aux critères définis, qu’il s’agisse de leur taille, de leur nom ou d’autres attributs.
Dans cet exposé, nous commencerons par clarifier les commandes de recherche basiques de Linux à l’aide d’exemples. Cela vous permettra de comprendre comment identifier des fichiers et des dossiers. Par la suite, nous détaillerons comment exploiter l’option -exec
pour agir sur les fichiers ou les dossiers en fonction de leurs attributs, comme leur taille ou leurs permissions.
La syntaxe générale de la commande find
se présente comme suit:
find {chemin} {nom-de-fichier-ou-dossier-à-rechercher} {action-à-effectuer}
Où :
chemin
indique le répertoire de départ de la recherche.nom-de-fichier-ou-dossier-à-rechercher
est le nom du fichier ou du dossier à cibler.action-à-effectuer
représente l’opération à réaliser (copier, supprimer, déplacer, etc.).
Ce tutoriel vous apprendra à repérer des fichiers et des dossiers qui correspondent à des modèles donnés. Nous explorerons également comment effectuer des actions sur les éléments que la commande find
identifie. Ce guide s’appuie sur Ubuntu, mais il est applicable à la majorité des distributions et versions Linux.
Recherche de fichiers et de répertoires
Rechercher des fichiers spécifiques par nom ou extension
Pour cibler un fichier précis, exécutez la commande suivante depuis la racine (/). La commande inclut le nom exact du fichier recherché.
find . -name file22.txt
Résultat :
./test/file22.txt ./sales/file22.txt
Il est à noter que les résultats affichent le chemin d’accès. Cela est particulièrement utile lorsque l’emplacement du fichier est inconnu ou lorsqu’il se trouve à plusieurs endroits.
Il est également possible de chercher le fichier dans un autre dossier tout en restant à l’emplacement actuel. Dans ce cas, il est nécessaire de spécifier le chemin du dossier où la recherche doit s’effectuer.
find ./test -name file22.txt
Recherche de fichiers spécifiques dans un autre répertoire
Dans notre exemple, nous chercherons tous les fichiers dont le nom commence par « file » dans le dossier « test ».
find ./test -name file*
Résultat :
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5.doc
Rechercher des fichiers par extension
Pour cibler un fichier Linux possédant une extension particulière, ajoutez cette dernière à la commande.
find . -name *.txt
Résultat :
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Rechercher des fichiers et des répertoires par nom
Employez la commande ci-dessous pour rechercher les fichiers et les dossiers dont le nom débute par « qa ». Dans notre cas, nous possédons les fichiers « qatree.txt » et « qa.txt », ainsi qu’un répertoire nommé « qa ».
Si nous exécutons la commande :
find ./ -name "qa*"
Elle renverra le résultat suivant :
./test/qatree.pdf ./test/qa.txt ./home/qa
La commande affiche à la fois les fichiers et les dossiers qui correspondent aux critères de recherche. Pour rechercher uniquement des fichiers ou des dossiers, il est nécessaire de le spécifier dans la commande.
Rechercher uniquement des fichiers ou des répertoires
Pour filtrer uniquement les fichiers, utilisez l’option -type f
.
Fichiers uniquement :
find ./ -type f -name "qa*"
Résultat :
./test/qatree.pdf ./test/qa.txt
Dossiers uniquement :
Ajoutez l’option -type d
pour ne localiser que les dossiers.
find ./ -type d -name "qa*"
Résultat :
./home/qa
Commande de recherche insensible à la casse
Les recherches réalisées avec l’option -name
sont sensibles à la casse et ne renverront pas de résultats si la casse n’est pas identique. Pour inclure tous les cas, utilisez l’option -iname
.
find ./ -iname "qa*"
Résultat :
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Rechercher un fichier dans plusieurs répertoires
Pour chercher des fichiers dans divers dossiers, ajoutez leurs chemins à la commande. Dans notre cas, nous allons examiner les dossiers « test » et « numeric ».
find ./test ./numeric -name file22.txt -type f
Résultat :
./test/file22.txt /root/numeric/file22.txt
Trouver plusieurs fichiers avec différentes extensions dans tous les répertoires
La commande find
permet de localiser plusieurs fichiers partageant différentes extensions telles que *.doc
, *.txt
, *.pdf
, etc. Il est possible de le faire séparément, extension par extension, ou via une seule commande regroupant toutes les extensions souhaitées.
find . -type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )
Résultat :
./test/subtest/subfil.txt ./test/qatree.pdf ./test/file22.txt ./test/qa.txt ./test/file30.doc ./books/acro.pdf ./data1/FILE22.txt ./docs/files32.txt
Rechercher des fichiers contenant un certain texte
Parfois, il est nécessaire d’accéder à un fichier contenant un texte précis, mais son nom ou son emplacement exacts sont inconnus. Cette commande permet de retrouver tous les fichiers renfermant le texte cible.
Pour rechercher tous les fichiers contenant le mot « hyperconvergence », utilisez la commande suivante :
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Résultat :
/root/numeric/hci /root/HCIP
L’option -i
permet à la commande de ne pas tenir compte de la casse, afin de retrouver le texte, qu’il soit en majuscules ou non (par exemple, « hyperconvergence », « Hyperconvergence », etc.).
Pour rechercher les fichiers dans un dossier particulier, il suffit d’ajouter le chemin à la commande :
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Résultat :
./numeric/hci
Explorez d’autres exemples de commandes grep
.
Rechercher des fichiers et des répertoires en fonction de leur taille
Il est possible de trouver tous les fichiers ou dossiers qui sont plus petits, égaux ou plus grands qu’une taille donnée, dans une fourchette spécifique, ou encore ceux qui sont vides. Utilisez le format de taille approprié en fonction du type de fichiers ou de dossiers recherchés.
Les options de taille incluent :
c
– octets
k
– kilo-octets
M
– Mégaoctets
G
– Gigaoctets
Trouver des fichiers d’une certaine taille – égale à 30 Mo
Pour localiser tous les fichiers de 30 Mo, employez cette commande :
find / -size 30M
Rechercher des fichiers plus grands qu’une taille spécifiée
find -size +2M
Résultat :
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Rechercher des fichiers de moins de 10 Mo dans le répertoire actuel
find . -type f -size -10M
Rechercher des fichiers dont la taille est comprise entre 100 et 200 Mo
Pour rechercher des fichiers dans une plage donnée, par exemple entre 100 et 200 Mo :
find / -size +100M -size -200M
Rechercher des répertoires de plus de 20 Ko
find / -type d -size +20k
Trouver des fichiers et des répertoires vides.
Fichiers :
find ./ -type f -size 0
Ou :
find ./ -type f –empty
Dossiers :
find ./ -type d –empty
Rechercher des fichiers par âge ou heure de modification
Rechercher des fichiers datant de plus de n jours :
find /chemin/ -type f -name '*.txt' -mtime +8
L’option -mtime +8
recherchera les fichiers .txt
datant de plus de 8 jours.
Par date de modification
Cette commande recherchera les fichiers modifiés au cours des 17 dernières heures :
find . -mtime -17 -type f
Recherche les dossiers modifiés au cours des 10 derniers jours :
find . -mtime -10 -type d
Rechercher des fichiers en fonction de l’accès ou de la modification
Rechercher des fichiers en fonction de la date ou de l’heure de leur dernier accès. Cela permet de voir quels fichiers ont été consultés, ou non, pendant une période donnée.
Pour voir les fichiers qui n’ont pas été consultés au cours des 10 derniers jours dans le répertoire personnel :
find /home -atime +10
Fichiers consultés il y a exactement 10 jours :
find /home -atime 10
Fichiers consultés au cours des 10 derniers jours :
find /home -atime -10
Rechercher les fichiers modifiés au cours des n derniers jours
Il est également possible de rechercher les fichiers du dossier /home
modifiés au cours des 10 derniers jours à l’aide de cette commande :
find /home -mtime -10
Trouver les fichiers modifiés pendant une période spécifique.
Par exemple, tous les fichiers modifiés il y a entre 6 et 15 jours dans le répertoire home
:
find /home -type f -mtime +6 -mtime -15
Fichiers et dossiers consultés au cours des 10 dernières minutes
Pour trouver les fichiers consultés au cours des 10 dernières minutes, utilisez l’option -amin
.
find . -amin -10 -type f
Résultat :
./.bash_history ./[email protected]:~#
Dossiers consultés au cours des 10 dernières minutes :
find . -amin -10 -type d
Rechercher des fichiers correspondant à des autorisations spécifiques
Syntaxe :
$ find -perm mode
Où mode
est l’autorisation, qui peut être numérique (par exemple 644, 655, 700, 777, etc.) ou textuelle (par exemple u=x
, a=r+x
, etc.).
Il est possible de spécifier le mode de trois manières :
- Sans préfixe, lorsque vous souhaitez rechercher des fichiers ayant les permissions exactes spécifiées.
- Avec «
-
« , pour les fichiers ayant au moins la permission spécifiée. Cela renvoie les fichiers ayant les permissions indiquées, ainsi que les permissions supplémentaires plus élevées. - L’utilisation de «
/
» nécessite de spécifier le propriétaire ou le groupe ayant la permission d’accéder au fichier.
Rechercher des fichiers avec la permission 777
find -perm 777
Résultat :
./file1
Trouver des fichiers avec au moins la permission 766 :find -perm -766
Résultat :
./file2 ./file1
La commande recherche tous les fichiers où :
- Le propriétaire du fichier possède les autorisations de lecture, d’écriture et d’exécution.
- Le groupe possède les autorisations de lecture et d’écriture.
- Les autres ont la permission de lecture et d’écriture.
Elle renvoie donc deux fichiers qui remplissent ces conditions : « file1 » et « file2 ». Les fichiers n’ont pas besoin d’avoir exactement les permissions 766, mais ils doivent au minimum avoir les autorisations spécifiées.
Trouver des fichiers accessibles en écriture par le propriétaire
Nous allons maintenant utiliser « /
» pour rechercher des fichiers accessibles en écriture soit par leur propriétaire, soit par un groupe, soit par les autres.
find -perm /222 .
./file2 ./file3 ./file1
La commande ci-dessus cherche les fichiers qui sont accessibles en écriture par leur propriétaire ou par leur groupe.
Cela renvoie les fichiers qui sont accessibles en écriture par l’un ou l’autre, mais pas nécessairement par les deux. Pour voir les fichiers où les deux ont des permissions en écriture, utilisez le préfixe -
.
find -perm -220
Résultat :
./file2 ./file1
Rechercher des fichiers appartenant à un utilisateur
Trouver tous les fichiers appartenant à « jack » :
find /home -user jack
Résultat :
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Rechercher des fichiers spécifiques appartenant à un utilisateur
Trouver tous les fichiers texte appartenant à « jack » :
find /home -user jack -iname "*.txt"
Résultat :
/home/jack/docs/file32.txt
Rechercher et lister les fichiers et dossiers avec leurs autorisations
find -name "*.conf" | ls -l
Résultat :
total 120 drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2 drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23 -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt
Trouver et agir sur les résultats
Dans cette section, nous allons voir comment agir sur les fichiers qui correspondent au modèle spécifié dans la commande find
.
Rechercher des fichiers et modifier les autorisations
Rechercher et modifier les permissions de certains types de fichiers. Dans notre exemple, nous allons travailler avec des fichiers PHP ayant différentes autorisations, comme indiqué ci-dessous :
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php
Nous allons maintenant chercher tous les fichiers PHP (ci-dessus) et remplacer leurs permissions par 755 :
find ver -name "*.php" -type f -exec chmod 755 {} ;
La commande recherche les fichiers PHP dans le dossier « ver », puis définit leur permission à 755 (rwxr-xr-x).
Résultats :
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php
Rechercher et modifier les permissions des fichiers et des dossiers
Trouver les fichiers ayant les permissions 644 et les modifier pour qu’ils aient les permissions 655 :
find . -type f -perm 644 -exec chmod 655 {} ;
Il est également possible de rechercher des dossiers ayant les permissions 644 et de les remplacer par 755.
find . -type d -perm 644
Résultat :
./docs
Le dossier « docs » a les permissions 644 :
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Pour le modifier à 755, nous exécutons :
find . -type d -perm 644 -exec chmod 755 {} ;
Maintenant, nous pouvons vérifier à nouveau pour voir exactement ce que 755 :
find . -type d -perm 755
Résultat :
.
./docs
D’après ce qui précède, nous pouvons voir que les dossiers « root » et « docs » ont les permissions 755.
La commande ls -la
donne les détails suivants :
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Rechercher et copier des fichiers ou des dossiers
Rechercher et copier un fichier spécifique dans un dossier :
La commande ci-dessous trouvera le fichier « file22.txt » et le copiera dans le dossier ~/tmp/images
.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Rechercher et copier un type de fichiers dans un dossier :
Pour rechercher des fichiers tels que des images avec l’extension « jpg » dans le dossier courant et les copier dans un autre emplacement, tel qu’un dossier « images », utilisez :
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Cela trouvera et copiera tous les fichiers « jpg » dans le dossier ~/tmp/images
.
Trouver et copier un fichier dans plusieurs dossiers
Trouver et copier un seul fichier vers plusieurs dossiers :
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Cela trouvera le fichier « hci » et le copiera dans les trois dossiers /tmp/dir1/
, /tmp/dir2/
et $HOME/3/
.
Rechercher et déplacer des fichiers vers un autre répertoire
Pour déplacer un fichier connu d’un dossier à un autre. Pour déplacer le fichier « universal.php » :
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Rechercher et déplacer des fichiers avec une certaine extension vers un autre dossier :
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Trouver certains fichiers et les déplacer dans un autre dossier spécifique
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
La commande recherche tous les fichiers dont le nom commence par « uni » et ayant n’importe quelle extension. Elle les déplace ensuite dans le dossier /unifiles/
.
Rechercher et déplacer des fichiers en fonction de leur ancienneté
Rechercher et déplacer les fichiers plus anciens que le nombre de jours spécifié vers un autre emplacement, tel que le dossier « archive » :
find /chemin/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
Cela recherchera les fichiers pdf de plus de 20 jours et les déplacera vers le dossier backup1
.
Rechercher et supprimer des fichiers et des dossiers
La syntaxe pour rechercher et supprimer des fichiers ou des dossiers dans le répertoire courant est :
find . -type f -name "fichier à supprimer" -exec rm -f {} ;
pour supprimer uniquement les fichiers, ou
find . -type d -name "dossier à supprimer" -exec rm -rf {} ;
pour supprimer uniquement les dossiers.
Rechercher et supprimer uniquement des fichiers spécifiques
Pour rechercher et supprimer des fichiers dont le nom commence par « til », utilisez :
find . -type f -name "til*" -exec rm {} ;
Pour rechercher et supprimer des dossiers dont le nom commence par « til » :
find . -type d -name "til*" -exec rm {} ;
Supprimer les fichiers et les dossiers
find . -name "til*" -exec rm -rf {} ;
Cela supprimera à la fois les fichiers et les dossiers dont le nom commence par les lettres « til ».
Supprimer par extension
Vous trouverez ci-dessous comment localiser et supprimer tous les fichiers « txt » du répertoire courant. Remplacez « txt » par une autre extension telle que « bak », « pdf » ou toute autre extension que vous souhaitez supprimer.
find . -type f -name "*.txt" -exec rm -f {} ;
Si vous voulez que le système vous demande de confirmer avant de supprimer chaque fichier, ajoutez l’option -i
comme ci-dessous :
find . -type f -name "*.txt" -exec rm -i {} ;
Résultat :
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
Par défaut, l’option -rm
ne supprimera pas les dossiers, et il est nécessaire d’utiliser l’option –r
pour assurer une suppression récursive. Cela garantit la suppression des dossiers vides ainsi que de ceux contenant des fichiers. L’option -f
force la suppression et s’utilise à la fois pour les fichiers et les dossiers.
Rechercher et supprimer des fichiers de plus de n jours
Rechercher et supprimer les fichiers de sauvegarde datant de plus de 20 jours du répertoire actuel :
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Cela supprimera tous les fichiers .bak
de plus de 20 jours.
Rechercher et supprimer des dossiers uniquement
Pour supprimer un dossier nommé « dir22 » :
find . -type d -name dir22 -exec rm -rf {} ;
Assurez-vous de respecter la casse du nom du dossier ou utilisez l’option -iname
.
find . -type d -iname Dir22 -exec rm -rf {} ;
Cela supprimera à la fois « Dir22 » et « dir22 ».
Pour confirmer avant la suppression, utilisez l’option -i
.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Résultat :rm : supprimer le répertoire ‘./Dir22’ ? n
rm : supprimer le répertoire ‘./dir22’ ? y
Dans notre cas, nous avons tapé « n » pour le dossier « Dir22 » qui ne sera pas supprimé, et « y » pour « dir22 » qui sera désormais supprimé.
Rechercher et supprimer des fichiers vides
Vous pouvez utiliser l’une des commandes suivantes pour localiser les fichiers vides et les supprimer automatiquement :
find ./ -type f -size 0 -exec rm -f {} ;
Ou :find ./ -type f -size 0 | xargs rm-f
Ou :find ./ -type f -size 0 –delete
Rechercher et supprimer des dossiers vides
Pour supprimer les dossiers vides, nous utiliserons l’option « d » :
find ./ -type d -empty -exec rmdir {} ;
Une autre alternative consiste à utiliser « delete » au lieu de « remove » :
find ./ -type d -empty -delete
Il est important de noter que la suppression de fichiers système ou critiques de votre ordinateur peut endommager le système d’exploitation ou les applications, ou entraîner la perte de vos données importantes.
Pour éviter les suppressions accidentelles, il est recommandé d’utiliser un compte utilisateur non « root ». Assurez-vous également de supprimer les bons fichiers qui ne sont pas utiles et d’avoir une sauvegarde de tous vos fichiers de données au cas où.
Et après?
Essayez les commandes de recherche Linux ci-dessus dans votre environnement de laboratoire ou de non-production. Voyez si vous pouvez les utiliser pour automatiser le nettoyage du système de fichiers avec Crontab. Et pour maîtriser Linux, consultez ce cours en ligne.