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 à rechercher
  • action à 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.

  1. Sans préfixe, lorsque vous souhaitez rechercher des fichiers avec les autorisations exactes spécifiées.
  2. 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.
  3. 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.txtet 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.