40 meilleurs exemples de commande Find sous Linux

Table des matières



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

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.