Commande find Linux : Exemples d’utilisation pour rechercher des fichiers

La commande Linux Find est l'un des utilitaires de ligne de commande les plus importants et les plus fréquemment utilisés dans les systèmes d'exploitation de type Unix.

On l'utilise pour rechercher et localiser la liste des fichiers et répertoires.
La recherche peut être utilisée dans diverses conditions telles que la recherche de fichiers par autorisations, utilisateurs, groupes, type de fichier, date, taille et d'autres critères possibles.
Vous verrez que l'on peut combiner le résultat des recherches find pour exécuter d'autres commandes Linux, ce qui la rend très puissante.

Cet article vous donne des exemples d'utilisation de la commande find avec les options les plus utiles.

Commande find Linux : Exemples d'utilisation pour rechercher des fichiers

Commande find Linux : Exemples d'utilisation pour rechercher des fichiers

Utilisation et exemple basique

Rechercher un fichier/répertoire sur nom spécifique comme malekal.txt.

find . -name malekal.txt

Rechercher tous les fichiers/répertoire avec le mot malekal dans le nom.

find . -name *malekal*

Dans les exemples qui suivent on recherche sur le répertoire courant en indiquant .
Mais on peut chercher dans un répertoire spécifique comme /var.

find /var -name *malekal*

Rechercher sur le nom ou arborescence

OptionsDescription
-name patternPermet de rechercher sur un nom de fichier
-iname patternComme -name mais sensible à la case
-path patternrecherche un patern dans une arborescence quelque soit le niveau
-ipath patternComme -path mais sensible à la case
-regex patternLe nom du fichier correspond au modèle d'expression régulière
On peut indiquer le type de regex avec -regextype
-iregex patterncomme -regex mais sensible à la case
-mindepth nIndiquer une profondeur d'arborescence minimale
-maxdepth nIndiquer une profondeur d'arborescence maximale
-prunePour ignorer un fichier ou arborescence
Les options de find sur le nom ou chemin

Ces options prennent en charge les métacaractères (wildcard).

Soit l'arborescence suivante :

Commande Find rechercher dans une arborescence

Rechercher dans une arborescence qui comporte le mot kikoo

sudo find /tmp/ -path "*kikoo*" -print

Dans ce cas précis, si on remplace -path par -name, on obtiendra le même résultat.

Commande Find avec l'option -path

Mais -path permet de filtrer la recherche dans une arborescence spécifique.
Par exemple pour trouver tous les fichiers malekal dans l'arborescence avec le mot kikoo :

sudo find /tmp/ -path "*kikoo*" -name "*malekal*" -print

Ainsi /tmp/demo/kikoo/malekal.txt ressort mais pas /tmp/malekal.txt.
Par contre -path et -name utilisés seuls ne donnent aucune différence.

Commande Find avec l'option -path

Pour filtrer sur la taille minimale (-mindepth) ou maximale (-maxdepth) de l'arborescence :

sudo find /tmp/ -maxdepth 2 -name "*kikoo*" -print
sudo find /tmp/ -mindepth 3 -name "*kikoo*" -print
Commande Find avec l'option -mindepth et -maxdepth

Pour filtrer avec un regex :

sudo find /tmp/ -regextype sed -regex ".*kikoo[0-9].*" -print
Commande Find avec l'option -regex

Rechercher en excluant tout ce qui comporte un nom avec kikoo.

sudo find /tmp/ -path "*kikoo*" -prune -o -print
Commande Find avec l'option -path et -prune

Filtrer sur un type de fichiers, répertoire, socket, etc

L'option -type permet de filtrer sur un type pour n'avoir que les fichiers, que les répertoires, les sockets, etc.

Paramètres de -typeDescriptions
bblock (buffered) special
ccaractères spéciaux
drépertoire
pnamed pipe (FIFO)
ffichier
llien symbolique
ssocket
Les paramètres de l'option -type pour filtrer

Rechercher que sur les fichiers :

find / -type f -name "*ssh*"
Commande Find avec l'option -type

Pour rechercher que sur les répertoires :

find / -type d -name "*ssh*"
Commande Find avec l'option -type

et si l'on veut chercher sur plusieurs types à la fois, on les sépare avec une virgule.

sudo find / -type f,d -name "*ssh*"
Commande Find avec l'option -type

On peut aussi utiliser l'option -empty pour trouver les fichiers vides.
Trouver les fichiers vides :

find /tmp -type f -empty

Trouver les répertoires vides :

find /tmp -type d -empty

Rechercher des fichiers sur les permissions

Pour rechercher les fichiers et répertoires avec les permissions 664.

find /var -perm 664

Recherchez les 777 fichiers d'autorisation et utilisez la commande chmod pour définir les autorisations sur 644.

find / -type f -perm 0777 -print -exec chmod 644 {} \;

La même recherche mais pour un répertoire :

find / -type d -perm 777 -print -exec chmod 755 {} \;

Enfin on peut aussi rechercher sur les fichiers en lecteur seule ou exécution

find / -perm /u=r
find / -perm /a=x

Rechercher des fichiers en fonction des propriétaires et des groupes

Rechercher les fichiers dans /home dont malekalmorte est le propriétaire :

find /home -user malekalmorte

ou dont malekalmorte est le groupe :

find /home -group developer

Rechercher des fichiers et des répertoires en fonction de la date et de l'heure

Plusieurs options sont disponibles pour rechercher des fichiers sur les dates de modifications ou de derniers accès.

Les optionsDescription
-daystartMesurez les temps (pour -amin, -atime, -cmin, -ctime, -mmin et -mtime) depuis le début d'aujourd'hui plutôt que depuis 24 heures
-atime nLe fichier a été consulté pour la dernière fois il y a n * 24 heures. Lorsque find calcule le nombre de périodes de 24 heures auxquelles le fichier a été accédé pour la dernière fois, toute partie fractionnaire est ignorée, donc pour correspondre à -atime +1, un fichier doit avoir été consulté il y a au moins deux jours.
-cmin nL'état du fichier a été modifié pour la dernière fois il y a n minutes
-ctime nL'état du fichier a été modifié pour la dernière fois il y a n * 24 heures
-mmin nLes données du fichier ont été modifiées pour la dernière fois il y a n minutes
-newerLe fichier a été modifié plus récemment que le fichier.
Si le fichier est un lien symbolique et que l'option -H ou l'option -L est active, l'heure de modification du fichier vers lequel il pointe est toujours utilisé
-anewerLe dernier accès au fichier a eu lieu plus récemment que la modification du fichier.
Les options find sur les dates et heure des fichiers

On applique ensuite les options suivantes pour indiquer le temps en plus ou en moins :

  • +n pour plus de n
  • -n pour moins de n
  • n pour exactement n

Voici quelques exemples.

Recherche dans tout le répertoire personnel à la recherche de tous les fichiers qui se terminent par les indicateurs .txt sont modifiés au cours des 5 derniers jours.

find /home/ -iname "*.txt" -mtime 5 -print

Trouver tous les fichiers modifiés il y a moins de 24 heures.

find /home/ -iname "*.txt" -mtime -24 -print

Retrouver les fichiers modifiés il y a 60 min.

find /home/ -iname "*.txt" -cmin -60 -print

Pour trouver tous les fichiers qui sont consultés il y a 50 jours.

find /home -iname "*.txt" -atime 50 -print

Rechercher des fichiers et des répertoires en fonction de leur taille

Pour trouver tous les fichiers supérieurs à 50 Mo et inférieurs à 100 Mo.

find / -size +50M -size -100M

Recherchez les fichiers de plus de 1 Go, puis classez la liste par taille de fichier.

find . -size +1G -ls | sort -k7n
Les paramètresunités
bbloc de 512 octet
coctet
kkiloctets
Mmegaoctet
Ggigaoctet
Les paramètres de l'option -size de la commande find

Au besoin, se reporter à cette page sur les unités :

Rechercher plusieurs noms de fichiers sous Linux

Par exemple pour rechercher sur tous les fichiers .sh et .txt

find . -type f \( -name "*.sh" -o -name "*.txt" \)

Exemples de l'utilisation de find avec -exec

L'option -exec permet d'exécuter une commande avec le résultat de la sortie find.
C'est très pratique pour supprimer, copier des fichiers en filtrant.

Par exemple pour calculer le md5 de fichier ISO :

find / -iname "*.iso" -exec md5sum {} \;
Commande Find avec l'option -exec

Supprimer tous les fichiers avec le nom malekal.

find . -name *malekal* -exec rm -i {} \; 

Pour trouver tous les fichiers de 100 Mo et les supprimer à l'aide d'une seule commande.

find / -type f -size +100M -exec rm -f {} \;

On peut aussi rechercher et supprimer un fichier par son inode.
Je rappelle que l'inode est le numéro d'emplacement d'un fichier ou dossier dans un bloc de disque. Cela est spécifique au système de fichier ext4.
Cela aide à supprimer les fichiers récalcitrants avec des noms qui posent problème.

On récupère le numéros inode du fichier par la commande.

ls -lhi

Puis on fait une recherche du fichier par l'inode pour exécuter rm dessus.

find -inum <numéro inode> -exec rm -i {} \;
Commande Find avec l'option -exec

Liste des options de la commande find

Les optionsDescription
-exec CMDLe fichier recherché qui répond aux critères ci-dessus et renvoie 0 comme statut de sortie pour l'exécution de la commande réussie
-ok CMDIl fonctionne de la même manière que -exec sauf que l'utilisateur est invité en premier
-inum NRecherchez les fichiers avec le numéro d’inode «N»
-links NRechercher des fichiers avec des liens «N»
-name <ce que l'on cherche>Rechercher les fichiers spécifiés par <ce que l'on cherche>
-newer fileRechercher les fichiers modifiés / créés après "fichier"
-perm octalRecherchez le fichier si l’autorisation est «octale»
-printAfficher le nom de chemin des fichiers trouvés en utilisant le reste des critères
-emptyRechercher des fichiers et des répertoires vides
-size +N/-NRechercher des fichiers de blocs «N»; «N» suivi de «c» peut être utilisé pour mesurer la taille en caractères; «+ N» signifie taille> «N» blocs et «-N» signifie taille <«N» blocs
-user nameRecherchez les fichiers appartenant au nom d’utilisateur ou à l’ID «nom». \ (expr \): Vrai si «expr» est vrai; utilisé pour regrouper des critères combinés avec OU ou ET
! exprVrai si «expr» est faux.
Les options de la commande find

Tags: