📖 Chapitre 44/45 — Linux : Les commandes Voir le sommaire →
← Retour
Informatique

find - chercher des fichiers comme vous le pensez

Cédrix · 14/04/2023
Modifié le 6 juin 2026 à 10h02

1/ 7 j  ·  4/ 14 j  ·  4/ 30 j  lecteurs

grep cherche à l’intérieur des fichiers. find cherche les fichiers eux-mêmes — par nom, par date, par taille, par type, par permissions... et il peut même exécuter une commande sur chaque résultat.

C’est l’outil à dégainer quand vous vous demandez “mais où est passé ce fichier ?“ ou “quels sont les fichiers modifiés aujourd’hui ?“.


La forme de base

find où quoi

Plus précisément :

find [dossier de départ] [critères]

Si vous ne précisez pas de dossier, find cherche dans le dossier courant. Si vous ne précisez pas de critères, il liste absolument tout.

find .

Ça affiche tous les fichiers et dossiers à partir d’ici. Souvent des milliers de lignes — utile surtout combiné avec des critères.


Chercher par nom

-name — le critère le plus courant

find . -name "config.ini"
./projet/config.ini
./backup/config.ini

Trouve tous les fichiers qui s’appellent exactement config.ini, où qu’ils soient dans l’arborescence.

Les guillemets acceptent les wildcards :

find . -name "*.log"        # tous les fichiers .log
find . -name "test_*"       # tout ce qui commence par test_
find . -name "*config*"     # tout ce qui contient "config"

-iname — sans se soucier de la casse

find . -iname "readme*"

Trouve README.md, Readme.txt, readme.rst... La casse ne compte plus.


Chercher par type

find . -type f    # fichiers uniquement
find . -type d    # dossiers uniquement
find . -type l    # liens symboliques

En pratique, vous combinez presque toujours -type f avec autre chose pour éviter que les dossiers parasitent les résultats :

find . -type f -name "*.py"
./src/main.py
./src/utils.py
./tests/test_auth.py

Chercher par date

C’est là que find devient vraiment utile. Trois critères selon ce qui vous intéresse :

  • -mtime — date de modification du contenu
  • -atime — date de dernier accès
  • -ctime — date de changement (métadonnées, permissions...)

La valeur se donne en jours :

find . -mtime -1      # modifiés dans les dernières 24h
find . -mtime -7      # modifiés dans les 7 derniers jours
find . -mtime +30     # pas touchés depuis plus de 30 jours
find . -mtime 0       # modifiés aujourd'hui exactement

Le - signifie “il y a moins de”, le + signifie “il y a plus de”.

Exemple concret : retrouver ce fichier que vous avez modifié ce matin.

find ~ -type f -mtime -1

Pour une précision en minutes plutôt qu’en jours, utilisez -mmin :

find . -mmin -30    # modifiés dans les 30 dernières minutes

Chercher par taille

find . -size +100M    # fichiers de plus de 100 Mo
find . -size -10k     # fichiers de moins de 10 Ko
find . -size 0        # fichiers vides

Les unités disponibles : c (octets), k (Ko), M (Mo), G (Go).

Cas d’usage classique : votre disque est plein, vous cherchez les gros fichiers.

find / -type f -size +500M 2>/dev/null

Le 2>/dev/null cache les erreurs de permission — sinon le terminal se remplit de “Permission denied”.


Chercher par profondeur

Par défaut, find descend dans tous les sous-dossiers sans limite. Pour contrôler ça :

find . -maxdepth 1 -name "*.txt"    # seulement dans le dossier courant
find . -maxdepth 2 -name "*.txt"    # courant + un niveau en dessous
find . -mindepth 2 -name "*.txt"    # à partir du 2ème niveau

Combiner les critères

Les critères se cumulent — par défaut c’est un ET logique.

# Fichiers Python modifiés cette semaine
find . -type f -name "*.py" -mtime -7

# Fichiers vides dans le dossier tmp
find /tmp -type f -size 0

Pour un OU logique, utilisez -o :

find . -name "*.jpg" -o -name "*.png"

Pour exclure quelque chose, utilisez ! (ou -not) :

# Tous les .txt sauf ceux dans node_modules
find . -name "*.txt" ! -path "*/node_modules/*"

Exécuter une commande sur les résultats

C’est la fonctionnalité la plus puissante de find. Au lieu d’afficher les fichiers, il peut les traiter.

-exec — pour chaque fichier trouvé

find . -name "*.log" -exec rm {} \;

{} est remplacé par le nom du fichier, \; termine la commande. Ici on supprime tous les .log trouvés.

Autre exemple — afficher les 5 premières lignes de chaque fichier Python :

find . -name "*.py" -exec head -5 {} \;

-exec ... + — plus efficace

En remplaçant \; par +, find passe tous les fichiers d’un coup à la commande plutôt qu’un par un :

find . -name "*.py" -exec wc -l {} +

C’est équivalent à wc -l fichier1.py fichier2.py ... — beaucoup plus rapide sur de nombreux fichiers.

Supprimer avec -delete

Pour supprimer, -delete est plus simple et plus rapide que -exec rm :

find . -name "*.tmp" -delete
find . -type f -size 0 -delete    # supprimer les fichiers vides

Attention : toujours tester sans -delete d’abord pour voir ce qui sera supprimé.


Petite mise en pratique


Exercice 1 — Débutant

Trouvez tous les fichiers .conf dans /etc.

Voir la réponse
find /etc -name "*.conf"

Exercice 2 — Débutant

Listez tous les dossiers dans votre répertoire personnel (pas les fichiers).

Voir la réponse
find ~ -type d

Exercice 3 — Intermédiaire

Trouvez tous les fichiers modifiés dans les 2 derniers jours dans votre projet (./mon-projet).

Voir la réponse
find ./mon-projet -type f -mtime -2

Exercice 4 — Intermédiaire

Trouvez les fichiers de plus de 100 Mo sur votre système (en ignorant les erreurs de permission).

Voir la réponse
find / -type f -size +100M 2>/dev/null

Exercice 5 — Avancé

Supprimez tous les fichiers .tmp dans le dossier courant, sans toucher aux sous-dossiers.

Voir la réponse
find . -maxdepth 1 -name "*.tmp" -delete

-maxdepth 1 limite la recherche au dossier courant uniquement.


Cheatsheet

Commande Ce qu’elle fait
find . -name "*.txt" Fichiers par nom (wildcard OK)
find . -iname "readme*" Insensible à la casse
find . -type f Fichiers uniquement
find . -type d Dossiers uniquement
find . -mtime -7 Modifiés dans les 7 derniers jours
find . -mtime +30 Pas touchés depuis 30 jours
find . -mmin -60 Modifiés dans la dernière heure
find . -size +100M Plus de 100 Mo
find . -size 0 Fichiers vides
find . -maxdepth 2 Limiter la profondeur
find . -name "*.log" -delete Trouver et supprimer
find . -name "*.py" -exec wc -l {} + Trouver et exécuter
find . -name "*.txt" ! -path "*/node_modules/*" Exclure un chemin

Pour aller plus loin

  • -newer fichier — trouve les fichiers plus récents qu’un fichier de référence. Pratique dans les Makefiles.
  • -perm — cherche par permissions (find . -perm 777 pour les fichiers accessibles à tous).
  • -user / -group — cherche par propriétaire.
  • xargs — alternative à -exec, souvent plus flexible : find . -name "*.py" | xargs grep "TODO" (chercher un motif dans tous les fichiers Python).
  • fd — une alternative moderne à find, plus rapide et avec une syntaxe plus simple. À connaître si vous cherchez souvent.

La documentation complète : man find dans votre terminal.

Partager : ✉ Mail X in 🐘
Commentaires

Aucun commentaire pour l'instant. Soyez le premier !

Laisser un commentaire
Un code de vérification sera envoyé à votre adresse email.