La commande find
de Linux est un outil puissant qui permet aux administrateurs système de localiser et de gérer les fichiers et les répertoires en fonction d’un large éventail de critères de recherche. Elle permet de trouver des répertoires et des fichiers par leur nom, leur type ou leur extension, leur taille, leurs autorisations, etc.
Outre la localisation de fichiers et de répertoires, la combinaison de la commande find
avec d’autres commandes vous permet d’agir sur les résultats. L’ajout de l’option -exec
permet aux administrateurs système d’exécuter des commandes externes et d’effectuer des actions telles que la copie, le déplacement, la suppression ou la modification des autorisations des fichiers correspondant aux critères spécifiés, tels que la taille, le nom, etc.
Dans cet article, nous commencerons par expliquer les commandes de recherche de base de Linux à l’aide d’exemples. Vous saurez ainsi comment trouver des fichiers et des répertoires. Nous vous montrerons ensuite comment utiliser l’option -exec
pour agir sur les fichiers ou les répertoires en fonction de leur taille, de leurs autorisations, etc.
La syntaxe générale de la commande find est la suivante
find {chemin} {nom du fichier ou du répertoire à rechercher} {action à entreprendre}
Où : {chemin} {nom -du fichier ou du répertoire à rechercher} {action à entreprendre},
chemin
spécifie le répertoire.nom du fichier ou du répertoire à rechercher
: nom du fichier ou du répertoire à rechercheraction à entreprendre
: telle que copier, supprimer, déplacer, etc.
Dans ce tutoriel, nous expliquerons comment localiser des fichiers et des répertoires correspondant à des modèles spécifiés. Nous verrons également comment effectuer des actions sur les fichiers ou les répertoires localisés par la commande find. Ce guide est basé sur Ubuntu, mais il est applicable à la plupart des distributions et versions de Linux.
Rechercher des fichiers et des répertoires
Recherchez des fichiers spécifiques par nom ou par extension
Pour rechercher un fichier spécifique, exécutez la commande suivante à partir de la racine (/). La commande contient le nom exact du fichier que vous recherchez.
find . -nom fichier22.txt
Sortie
./test/fichier22.txt
./sales/fichier22.txt
Veuillez noter que les résultats incluent le chemin d’accès. Ceci est important si vous ne connaissez pas le répertoire où se trouve le fichier, ou si le fichier se trouve à plusieurs endroits.
Vous pouvez également rechercher le fichier dans un autre répertoire tout en restant dans l’emplacement actuel. Dans ce cas, vous devez indiquer le chemin d’accès au répertoire dans lequel vous souhaitez effectuer la recherche.
find ./test -name fichier22.txt
Recherche de fichiers spécifiques dans un autre répertoire
Dans notre cas, nous allons rechercher tous les fichiers commençant par les lettres file dans le répertoire test.
find ./test -name file*
Résultat
./test/fichier22.txt
./test/fichier30.doc
./test/fichier1.txt
./test/fichier5,doc
Recherche de fichiers par extension
Pour trouver un fichier sous Linux avec une certaine extension, ajoutez-la à la commande.
find . -nom *.txt
Sortie
./test/subtest/subfil.txt
./test/fichier22.txt
./test/fichier1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt
Recherche de fichiers et de répertoires par leur nom
Utilisez la commande ci-dessous pour rechercher les fichiers et les répertoires commençant par les lettres qa
. Dans notre ordinateur, nous avons les fichiers qatree.txt
et qa.txt
ainsi qu’un répertoire portant le nom qa.
Si nous exécutons la commande
find ./ -name "qa*"
Elle renvoie le résultat suivant
./test/qatree.pdf
./test/qa.txt
./home/qa
La commande renvoie les fichiers et les répertoires correspondant aux critères de recherche. Pour trouver uniquement des fichiers ou des répertoires, vous devez le spécifier dans la commande.
Rechercher uniquement des fichiers ou des répertoires
Pour les fichiers uniquement, utilisez le commutateur type f
.
Fichiers uniquement
find ./ -type f -name "qa*"
Sortie
./test/qatree.pdf
./test/qa.txt
Répertoires uniquement
Ajoutez l’option de type d
pour localiser uniquement les répertoires.
find ./ -type d -name "qa*"
Résultat
./home/qa
Commande find insensible à la casse
Toutes les recherches effectuées avec l’option -name
sont sensibles à la casse et ne donnent pas de résultats en majuscules. Pour obtenir toutes les majuscules, utilisez l’option -iname
.
find ./ -iname "qa*"
Résultat
./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa
Recherche d’un fichier dans plusieurs répertoires
Pour rechercher des fichiers dans différents répertoires, ajoutez leurs chemins d’accès dans la commande. Dans notre cas, nous allons chercher dans les répertoires test
et numérique
.
find ./test ./numeric -name file22.txt -type f
Résultat
./test/fichier22.txt
/root/numeric/file22.txt
Recherche de plusieurs fichiers avec des extensions différentes dans tous les répertoires
Vous pouvez utiliser la commande find pour localiser plusieurs fichiers partageant des extensions différentes telles que *.doc
, * .txt
, *.pdf
, etc. Vous pouvez le faire séparément, une extension à la fois, ou en utilisant une seule commande qui inclut toutes les extensions souhaitées.
trouver . -type f ( -nom "*.txt" -o -nom "*.pdf" -o -nom "*.doc" )
résultat
./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./livres/acro.pdf
./data1/FILE22.txt
./docs/files32.txt
Recherche de fichiers contenant un certain texte
Il arrive que vous souhaitiez accéder à un fichier contenant un certain texte, mais que vous ne vous souveniez pas de son nom ou de son emplacement. Cette commande vous permet de trouver tous les fichiers contenant votre texte cible.
Pour rechercher tous les fichiers contenant le mot “hyperconvergence”, utilisez la commande suivante ;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Sortie
/root/numeric/hci
/root/HCIP
L’option -i
permet à la commande d’ignorer les majuscules et de trouver le texte, qu’il soit en majuscules ou non, c’est-à-dire hyperconvergence, Hyperconvergence , etc.
Pour rechercher les fichiers dans un répertoire spécifique, ajoutez-les simplement à la commande
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Résultat
./numérique/hci
Découvrez d’autres exemples de commandes grep.
Recherche de fichiers et de répertoires en fonction de leur taille
Vous pouvez rechercher tous les fichiers ou répertoires dont la taille est inférieure, égale ou supérieure à une certaine taille, qui se trouvent dans une certaine plage ou qui sont vides. Utilisez le format de taille approprié en fonction du type de fichiers ou de répertoires que vous recherchez.
Les options de taille sont les suivantes ;
c
– octets
k
– kilo-octets
M
– Mégaoctets
G
– Gigaoctets
Recherchez des fichiers d’une certaine taille – égale à 30MB
Pour rechercher tous les fichiers de 30MB
trouver / -taille 30M
Rechercher les fichiers dont la taille est supérieure à une valeur donnée
find -size 2M
Sortie
. /Téléchargements/ubuntu18043.iso
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Trouver les fichiers de moins de 10MB dans le répertoire courant
find . -type f -size -10M
Rechercher les fichiers dont la taille est comprise entre 100 et 200 Mo
Lorsque vous recherchez des fichiers dans une fourchette spécifique, par exemple entre 100 et 200 Mo
find / -size 100M -size -200M
Rechercher des répertoires dont la taille est supérieure à 20 ko
find / -type d -taille 20k
Recherche les fichiers et les répertoires vides.
Fichiers
find ./ -type f -taille 0
ou
find ./ -type f -empty
Répertoires
find ./ -type d -empty
Recherche de fichiers en fonction de leur âge ou de leur date de modification
Recherche de fichiers datant de plus de n jours
find /path/ -type f -name '*.txt' -mtime 8
L’option -mtime 8
recherchera les fichiers txt
datant de plus de 8 jours.
Par date de modification
Ceci recherchera les fichiers modifiés au cours des 17 dernières heures
trouver . -mtime -17 -type f
Recherche les répertoires modifiés au cours des 10 derniers jours
find . -mtime -10 -type d
Recherche des fichiers en fonction de l’accès ou de la modification
Recherche de fichiers en fonction de la date ou de l’heure d’accès. Cela vous permet de voir les fichiers qui ont été consultés ou non au cours d’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 home.
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
Recherchez les fichiers modifiés au cours des n derniers jours
Vous pouvez également rechercher les fichiers du répertoire /home
modifiés au cours des 10 derniers jours à l’aide de la commande ;
find /home -mtime -10
Recherchez les fichiers modifiés au cours d’une période spécifique.
Par exemple, tous les fichiers modifiés entre 6 et 15 jours dans le répertoire home.
find /home -type f -mtime 6 -mtime -15
Fichiers et répertoires consultés au cours des 10 dernières minutes
Pour trouver les fichiers auxquels vous avez accédé au cours des 10 dernières minutes, utilisez l’option -amin.
find . -amin -10 -type f
Sortie
./.bash_history
./.profileroot@ubuntu1804:~#
Répertoires accédés au cours des 10 dernières minutes
find . -amin -10 -type d
Trouver les fichiers correspondant à des autorisations spécifiques
Syntaxe
$ find -perm mode
Où mode est la permission qui est soit numérique comme 644, 655, 700, 777
, etc, ou des lettres comme u=x, a=r x,
etc.
Vous pouvez spécifier le mode de trois manières différentes.
- Sans préfixe, lorsque vous souhaitez rechercher des fichiers avec les autorisations exactes spécifiées.
- Avec “
-
” pour les fichiers ayant au moins l’autorisation spécifiée. Cette méthode renvoie les fichiers avec les autorisations spécifiées ainsi que d’autres autorisations plus élevées. - L’utilisation de “
/
” nécessite de spécifier le propriétaire ou le groupe disposant de l’autorisation sur le fichier.
Rechercher les fichiers avec l’autorisation 777
find -perm 777
Sortie d’un fichier
./fichier1
Recherchez les fichiers avec au moins 766
find -perm -766
Résultat
./fichier2
./fichier1
La commande recherche tous les fichiers dans lesquels l’élément
- Le propriétaire du fichier a les droits de lecture/écriture/exécution.
- Le groupe a les droits de lecture/écriture
- D’autres personnes ont des droits de lecture/écriture
Ainsi, le système renvoie deux fichiers qui répondent à ce critère : file1 et file2. Les fichiers n’ont pas besoin d’avoir les 766
autorisations exactes et peuvent en avoir d’autres tant qu’ils le souhaitent, mais ils doivent au moins avoir les autorisations spécifiées.
Recherche de fichiers accessibles en écriture par le propriétaire
Nous allons maintenant utiliser le “/
” pour rechercher les fichiers accessibles en écriture par leur propriétaire, leur groupe ou d’autres personnes.
find -perm /222
.
./fichier2
./fichier3
./fichier1
La méthode ci-dessus recherche les fichiers qui sont accessibles en écriture par leur propriétaire ou leur groupe.
Cela renvoie des fichiers qui sont accessibles en écriture par l’un ou l’autre, mais pas nécessairement par les deux. Pour voir les fichiers pour lesquels les deux ont des droits d’écriture, utilisez le préfixe -.
find -perm -220
Résultat
./fichier2
./fichier1
Recherche de fichiers appartenant à un utilisateur
Trouver tous les fichiers appartenant à Jack
find /home -user jack
Sortie
/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi
Trouver des fichiers spécifiques appartenant à un utilisateur
Trouver tous les fichiers texte appartenant à Jack
find /home -user jack -iname "*.txt"
Sortie
/home/jack/docs/fichier32.txt
Rechercher et lister les fichiers et les répertoires avec leurs permissions
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
Recherchez les résultats et agissez en conséquence
Dans cette section, nous allons voir comment vous pouvez agir sur les fichiers qui correspondent au modèle spécifié dans la commande find.
Recherche de fichiers et modification des autorisations
Recherchez et modifiez les autorisations de certains types de fichiers. Dans notre cas, nous allons travailler avec des fichiers PHP ayant des permissions différentes, comme indiqué ci-dessous.
jack@ubuntu1804:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 3 janv. 14:05 ...
-rwxr-xr-x 1 jack jack 0 janv 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 janv 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 rechercher 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 répertoire ver
et définit leurs permissions à 755
(rwxr-xr-x)
Résultats
jack@ubuntu1804:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 janv 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
Recherchez et modifiez les permissions des fichiers et des répertoires
Recherchez les fichiers ayant des permissions de 644 et modifiez-les pour obtenir des permissions de 655
find . -type f -perm 644 -exec chmod 655 {} ;
Vous pouvez également rechercher les répertoires ayant des autorisations 644 et les remplacer par 755.
find . -type d -perm 644
Sortie
./docs
Le dossier docs a des permissions de 644
drwxrwxr-x 2 jack jack 4096 janv 3 12:45 docs
Pour passer à 755
, nous exécutons
find . -type d -perm 644 -exec chmod 755 {} ;
Nous pouvons maintenant vérifier à nouveau ce qu’est exactement 755
find . -type d -perm 755
Sortie
.
./docs
Nous pouvons voir ci-dessus que les répertoires root et docs ont les permissions 755.
La commandeLs -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 répertoires
Recherche et copie d’un fichier spécifique dans un répertoire
La commande ci-dessous permet de trouver le fichier file22.txt
et de le copier dans le répertoire ~/tmp/images
.
find -iname fichier22.txt -exec cp {} ~/tmp/images ;
Recherche et copie d’un type de fichier dans un répertoire
Pour rechercher des fichiers tels que des images portant l’extension jpg
dans le répertoire actuel et les copier à un autre endroit, par exemple dans un dossier d’images, utilisez la commande suivante ;
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Vous trouverez ainsi tous les fichiers jpg et les copierez dans le dossier ~/tmp/images
.
Recherche et copie d’un fichier dans plusieurs répertoires
Recherchez et copiez un fichier unique dans plusieurs répertoires.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Ceci trouvera le fichier hci et le copiera dans les trois répertoires /tmp/dir1/ /tmp/dir2/
et $HOME/3/
Recherche et déplacement de fichiers vers un autre répertoire
Pour déplacer un fichier connu d’un répertoire à un autre. Pour déplacer le fichier universal.php
;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Recherchez et déplacez les fichiers ayant une certaine extension vers un autre dossier
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Recherchez certains fichiers et déplacez-les dans un autre dossier spécifique
find -type f -nom uni*.* -exec mv {} ~/unifiles/ ;
La commande recherche tous les fichiers dont le nom commence par uni
et qui ont une extension quelconque. Elle les déplace ensuite dans le répertoire /unifiles/
Recherche et déplacement de fichiers en fonction de l’âge
Recherchez et déplacez les fichiers plus anciens que les jours spécifiés vers un autre emplacement, tel que l’archive.
find /chemin/ -type f -name '*.pdf' -mtime 20 -exec mv {} /backup1/ ;
Cette commande recherche les fichiers pdf datant de plus de 20 jours et les déplace dans le répertoire backup1.
Recherche et suppression de fichiers et de répertoires
La syntaxe pour rechercher et supprimer des fichiers ou des répertoires dans le répertoire courant est la suivante
find .
–type f -nom "fichier à supprimer" -exec rm -f {} ;
pour supprimer uniquement les fichiers ou
find .
-type d-name "dir-to-delete" -exec rm -rf {} ;
pour supprimer les répertoires uniquement
Recherche et suppression de fichiers spécifiques uniquement
Pour rechercher et supprimer des fichiers commençant par til, utilisez ;
find . -type f -name "til*" -exec rm {} ;
Pour rechercher et supprimer les répertoires commençant par til
find . -type d -name "til*" -exec rm {} ;
Supprimez à la fois les fichiers et les répertoires
find . -name "til*" -exec rm -rf {} ;
Cette commande supprimera les fichiers et les répertoires commençant par les lettres til.
Supprimer par extension
Voici comment localiser et supprimer tous les fichiers txt
dans le répertoire actuel. Remplacez txt
par une autre extension telle que bak
, pdf
ou toute autre extension que vous souhaitez supprimer.
trouver . -type f -name "*.txt" -exec rm -f {} ;
Si vous souhaitez que le système vous demande de confirmer la suppression de chaque fichier, ajoutez l’option -i comme indiqué ci-dessous.
find . -type f -nom "*.txt" -exec rm -i {} ;
Sortie
rm : supprimer le fichier vide './File22.txt' ? y
rm : suppression du fichier vide './file22.txt' ? y
rm : suppression du fichier vide './fichier23.txt' ?
Par défaut, l’option -rm
ne supprime pas les répertoires et vous devez utiliser l’option -r
pour assurer une suppression récursive. Cette option garantit la suppression des répertoires vides et de ceux qui contiennent des fichiers. L’option -f
force la suppression et est utilisée à la fois pour les fichiers et les répertoires.
Recherche et suppression de fichiers datant de plus de n jours
Recherche et supprime les fichiers de sauvegarde datant de plus de 20 jours dans le répertoire actuel.
find . -type f -name '*.bak' -mtime 20 -exec rm {} ;
Ceci supprimera tous les fichiers .bak datant de plus de 20 jours.
Recherche et suppression de répertoires uniquement
Pour supprimer un répertoire appelé dir22
find . -type d -name dir22 -exec rm -rf {} ;
Veillez à respecter la casse du nom du répertoire ou utilisez l’option -iname
.
find . -type d -iname Dir22 -exec rm -rf {} ;
Supprime à la fois Dir22
et dir22
Pour confirmer 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 répertoire Dir22
qui ne sera pas supprimé et y
pour le répertoire Dir22
qui sera supprimé.
Recherche et suppression de 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 -taille 0 -delete
Recherche et supprime les répertoires vides
Pour supprimer les répertoires vides, nous utiliserons l’option d.
find ./ -type d -empty -exec rmdir {} ;
Une autre solution consiste à utiliser l’option delete au lieu de remove.
find ./ -type d -empty -delete
Veuillez 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 préférable d’utiliser un compte d’utilisateur non root. Assurez-vous également que vous supprimez les bons fichiers qui ne sont pas utiles et que vous disposez d’une sauvegarde de tous vos fichiers de données, au cas où.
Que faire ensuite ?
Allez-y et essayez les commandes de recherche Linux ci-dessus dans votre laboratoire ou dans un environnement NON PRODUCTIF. Voyez si vous pouvez en utiliser certaines pour automatiser le nettoyage du système de fichiers avec Crontab. Et pour maîtriser Linux, consultez ce cours en ligne.