Maîtriser Find : Recherche Linux efficace
Mise à jour :
Quand on gère des serveurs ou des environnements de développement aux
arborescences complexes, il devient vite indispensable de pouvoir retrouver
rapidement un fichier de log volumineux, un script oublié, ou un répertoire de
projet égaré. La commande find permet de fouiller efficacement dans
l’arborescence d’un système de fichiers, selon des critères comme le nom, la
taille, la date de modification ou encore les permissions. La maîtriser, c’est
gagner du temps au quotidien et éviter de perdre des heures à naviguer
manuellement dans des dossiers imbriqués.
Introduction à find
La commande find est l’un des outils les plus puissants et polyvalents
pour rechercher des fichiers et répertoires sous Linux. Contrairement à des
outils comme locate, qui s’appuie sur une base de données mise à jour
périodiquement, find effectue une recherche en temps réel dans le système de
fichiers.
Elle permet non seulement de localiser des fichiers par nom, mais aussi selon une multitude de critères :
- type de fichier (fichier, dossier, lien, etc.),
- taille,
- date de dernière modification ou d’accès,
- propriétaire ou groupe,
- permissions,
- et même d’exécuter une action automatique sur chaque fichier trouvé.
Par exemple, pour trouver tous les fichiers .log de plus de 100 Mo dans
/var/log :
find /var/log -type f -name "*.log" -size +100MOu encore, pour supprimer tous les fichiers temporaires de plus de 7 jours :
find /tmp -type f -mtime +7 -exec rm -f {} \;Avec find, on peut automatiser des nettoyages, des audits, des recherches
ciblées, ou encore des actions conditionnelles — directement en ligne de
commande, sans devoir écrire un script complet.
Syntaxe de base
La commande find repose sur une syntaxe très flexible qui peut sembler dense
au début, mais qui devient redoutablement efficace une fois maîtrisée. Elle suit
une structure simple :
find [chemin] [conditions] [actions]Composants principaux
- Chemin : le point de départ de la recherche. Exemple :
/,/home,.(répertoire courant). - Conditions : critères de sélection (nom, taille, date, type…).
- Actions : ce qu’on veut faire avec les résultats (afficher, supprimer, déplacer…).
Exemple minimal
Pour lister tous les fichiers du répertoire courant et ses sous-dossiers :
find .Exemples avec critères
Rechercher tous les fichiers appelés config.php dans /var/www :
find /var/www -name "config.php"Rechercher sans tenir compte de la casse (-iname) :
find /home -iname "*.jpg"Afficher les fichiers trouvés avec leur chemin absolu :
find /etc -name "*.conf" -printSyntaxe avec actions
Exécuter une commande sur chaque fichier trouvé (exemple : suppression) :
find /tmp -type f -name "*.tmp" -exec rm {} \;Ici, {} est remplacé par chaque fichier trouvé et \; termine la commande
-exec.
La syntaxe de find est modulaire : on peut enchaîner autant de critères et
d’actions que nécessaire. C’est ce qui la rend à la fois très puissante et
parfaitement adaptable à chaque situation.
Recherche par nom
L’un des usages les plus courants de find est la recherche de fichiers ou de
répertoires selon leur nom. Cette opération peut être précise ou plus souple
grâce aux jokers (*, ?) et à la gestion de la casse.
Rechercher un fichier par nom exact
Pour trouver un fichier nommé erreurs.log dans /var/log :
find /var/log -name "erreurs.log"Cette commande est sensible à la casse.
Rechercher un fichier sans tenir compte de la casse
Pour trouver un fichier comme Rapport.TXT, rapport.txt, ou RAPPORT.txt :
find /home -iname "rapport.txt"-iname ignore la casse des lettres, ce qui est utile dans des systèmes avec
des noms de fichiers incohérents.
Utiliser des jokers pour filtrer
-
Tous les fichiers
.log:Terminal window find /var/log -name "*.log" -
Tous les fichiers qui commencent par
backup:Terminal window find /data -name "backup*" -
Tous les fichiers ayant exactement 5 caractères, suivis de
.txt:Terminal window find . -name "?????.txt"
Rechercher plusieurs motifs avec -o
Pour trouver tous les fichiers .sh ou .py :
find . \( -name "*.sh" -o -name "*.py" \)N’oubliez pas d’échapper les parenthèses avec \( et \).
Exclure un motif de la recherche
Pour ignorer tous les fichiers .bak :
find . -name "*.txt" ! -name "*.bak"La recherche par nom avec find est un réflexe quotidien pour retrouver un
fichier spécifique sans fouiller à la main. Grâce aux options comme -iname,
aux jokers et aux combinaisons logiques, vous pouvez rapidement cibler ce que
vous cherchez, même dans une arborescence complexe.
Recherche par type de fichier
Avec l’option -type, find permet de filtrer les résultats selon la nature
du fichier : fichier régulier, répertoire, lien symbolique, etc. C’est
indispensable pour cibler une catégorie précise de contenu.
Types de fichiers les plus courants
| Code | Type de fichier |
|---|---|
f | fichier régulier |
d | répertoire |
l | lien symbolique (symlink) |
c | périphérique caractère |
b | périphérique bloc |
s | socket |
p | tube nommé (FIFO) |
Trouver tous les fichiers réguliers
find /etc -type fTrouver tous les dossiers
find /home -type dTrouver tous les liens symboliques
find /usr -type lRechercher un type avec un nom spécifique
Par exemple, trouver tous les répertoires nommés tmp :
find / -type d -name "tmp"Ou tous les fichiers .sh :
find . -type f -name "*.sh"Combiner avec d’autres critères
Exemple : tous les liens symboliques pointant vers un fichier .conf :
find /etc -type l -name "*.conf"Grâce à l’option -type, vous pouvez affiner très rapidement vos recherches et
éviter d’avoir des résultats parasites comme des répertoires alors que vous
cherchez des fichiers, ou inversement.
Recherche par taille
find permet de localiser des fichiers en fonction de leur taille exacte ou
taille relative (plus grands ou plus petits que…). C’est très utile pour
repérer des fichiers trop volumineux, des vides à nettoyer, ou pour
auditer l’espace disque.
Syntaxe de base
find [chemin] -size [valeur]La valeur peut être exprimée dans différentes unités :
| Suffixe | Unité |
|---|---|
| c | octets |
| k | kilo-octets |
| M | méga-octets |
| G | giga-octets |
Exemples courants
Trouver les fichiers exactement de 1 Mo :
find /var/log -type f -size 1MFichiers de plus de 100 Mo :
find /var/log -type f -size +100MFichiers de moins de 10 Ko :
find . -type f -size -10kFichiers de taille 0 (vides) :
find /tmp -type f -size 0Rechercher dans une plage de taille
Trouver les fichiers entre 1 Mo et 10 Mo :
find . -type f -size +1M -a -size -10M
-aest l’opérateur et logique (implicite si non précisé).
Utiliser find avec -size permet d’identifier facilement les gros fichiers
oubliés, les archives mal compressées, ou encore de nettoyer
automatiquement certains fichiers trop petits ou trop anciens. C’est une étape
essentielle dans toute tâche de maintenance disque.
Recherche par date
Avec find, il est possible de rechercher des fichiers en fonction de leur
date de dernière modification, d’accès, ou de changement de statut.
Cela permet de cibler précisément les fichiers récents, oubliés ou inactifs.
Trois types de dates
| Option | Signification |
|---|---|
-mtime | dernière modification du contenu |
-atime | dernier accès au fichier |
-ctime | dernier changement de métadonnées (chmod, etc.) |
Les valeurs s’expriment en nombre de jours.
Exemples avec -mtime
Fichiers modifiés il y a exactement 7 jours :
find . -type f -mtime 7Fichiers modifiés il y a plus de 30 jours :
find /var/log -type f -mtime +30Fichiers modifiés il y a moins de 24h :
find . -type f -mtime -1Exemples avec -atime (accès)
Fichiers jamais relus depuis plus de 90 jours :
find /home -type f -atime +90Exemples avec -ctime (statut changé)
Fichiers dont les droits ou propriétaires ont changé récemment :
find /etc -type f -ctime -2Astuce : combiner avec une action
Supprimer tous les fichiers temporaires non modifiés depuis 7 jours :
find /tmp -type f -mtime +7 -exec rm -f {} \;Ces options permettent de cibler précisément les fichiers à conserver ou à supprimer selon leur ancienneté. Idéal pour les politiques de rétention, la gestion de logs ou l’audit de fichiers dormants.
Recherche par permissions
find permet également de filtrer les fichiers en fonction de leurs droits
d’accès (permissions UNIX). C’est un outil précieux pour identifier des
fichiers trop permissifs, incorrectement configurés, ou pour réaliser
des audits de sécurité.
Syntaxe de base
find [chemin] -perm [mode]Le mode peut être exprimé en :
- notation symbolique (ex :
/u+s,/g=w) - notation octale (ex :
644,755,777)
Exemples avec notation octale
Fichiers ayant exactement les permissions 644 :
find . -type f -perm 644Fichiers avec au moins les permissions 777 :
find . -type f -perm -777- Le tiret
-signifie que tous les bits donnés doivent être présents, mais d’autres peuvent l’être aussi.
Fichiers avec exactement 777, ni plus ni moins :
find . -type f -perm 0777Fichiers exécutables par tous :
find /usr/bin -type f -perm -111(Le bit 1 = exécution, sur user, group et autres)
Recherche de fichiers SUID/SGID
Fichiers avec SUID (Set User ID) :
find / -type f -perm -4000Fichiers avec SGID (Set Group ID) :
find / -type f -perm -2000Ce sont souvent des fichiers sensibles, à surveiller en audit.
Utiliser -perm avec find permet de détecter rapidement des erreurs de
configuration, des fichiers exposés, ou simplement de valider des
droits dans des scripts de déploiement ou de vérification.
Recherche par propriétaire et groupe
Avec find, on peut filtrer les fichiers selon l’utilisateur (-user) ou
le groupe (-group) qui les possède. C’est particulièrement utile pour :
- repérer les fichiers appartenant à un ancien utilisateur,
- identifier des fichiers avec de mauvaises permissions d’accès,
- faire un audit de fichiers sensibles.
Recherche par utilisateur
Fichiers appartenant à l’utilisateur alice :
find /home -type f -user aliceFichiers non appartenant à un utilisateur spécifique :
find /var -type f ! -user rootRecherche par groupe
Fichiers appartenant au groupe www-data :
find /var/www -type f -group www-dataFichiers ne faisant pas partie du groupe adm :
find /var/log -type f ! -group admCombiner utilisateur et groupe
Rechercher tous les fichiers appartenant à mysql:mysql :
find /var/lib/mysql -user mysql -group mysqlAvec une action
Changer les permissions sur tous les fichiers appartenant à user1 :
find /srv -type f -user user1 -exec chmod 640 {} \;Grâce à ces options, on peut effectuer des recherches ciblées sur la propriété des fichiers, automatiser des corrections ou audits et garantir que les données sont bien contrôlées par les bons utilisateurs ou services.
Exécution de commandes sur les résultats
L’une des fonctionnalités les plus puissantes de find, c’est la possibilité
d’exécuter automatiquement une commande sur chaque fichier trouvé grâce à
l’option -exec. Cela permet de traiter, supprimer, déplacer, analyser ou
modifier les fichiers en une seule ligne.
Syntaxe de base
find [chemin] [critères] -exec commande {} \;{}est remplacé par le nom de chaque fichier trouvé\;marque la fin de la commande (\échappe le;pour le shell)
Exemples courants
Supprimer tous les fichiers .tmp
find /tmp -type f -name "*.tmp" -exec rm {} \;Changer les permissions des fichiers .sh
find . -type f -name "*.sh" -exec chmod +x {} \;Compter les lignes dans chaque fichier .log
find /var/log -type f -name "*.log" -exec wc -l {} \;Utilisation avec -ok pour confirmation
Pour exécuter une commande avec confirmation utilisateur :
find . -name "*.bak" -ok rm {} \;Chaque suppression est alors validée manuellement.
Utilisation avec xargs (pour plus d’efficacité)
Avec un grand nombre de fichiers, -exec peut être lent car chaque appel est
distinct. On peut utiliser xargs :
find . -type f -name "*.log" | xargs grep "erreur"Supprimer les fichiers de plus de 100 Mo :
find /data -type f -size +100M -exec rm -f {} \;Grâce à -exec, find devient un véritable moteur d’automatisation : non
seulement vous trouvez les bons fichiers, mais vous pouvez immédiatement agir
dessus, sans écrire de boucle shell ou de script complexe.
Optimisation des recherches
Dans les grandes arborescences ou pour des tâches automatisées, il est utile
d’optimiser les recherches avec find pour les rendre plus rapides, plus
ciblées et plus précises. Voici les options principales pour affiner vos
recherches.
Limiter la profondeur avec -maxdepth et -mindepth
-maxdepth N : limite la descente à N niveaux de profondeur
Exemple : rechercher uniquement dans le répertoire courant (niveau 1) :
find . -maxdepth 1 -type f-mindepth N : ignore les N premiers niveaux
Exemple : ignorer le répertoire courant et ne chercher que dans les sous-dossiers :
find . -mindepth 2 -type fOn peut combiner les deux :
find . -mindepth 2 -maxdepth 4 -name "*.log"Exclure un répertoire avec -prune
Pour ignorer un sous-dossier spécifique pendant la recherche :
find . -path "./node_modules" -prune -o -type f -name "*.js" -printImportant :
-prunedoit être combiné avec-oet
Optimiser les suppressions massives
Plutôt que :
find . -name "*.bak" -exec rm {} \;Préférez :
find . -name "*.bak" -print0 | xargs -0 rmCela gère les noms de fichiers avec espaces ou caractères spéciaux.
Utiliser des expressions simples en priorité
Les critères simples comme -type, -name ou -mtime sont plus rapides à
évaluer. Placez-les en début de ligne pour un gain de performance.
Ces optimisations permettent de réduire les temps d’exécution, d’éviter des erreurs (fichiers sensibles dans un répertoire à ignorer) et de mieux contrôler la portée de vos recherches, surtout dans des scripts d’administration ou de sauvegarde.
Bonnes pratiques
Pour tirer le meilleur parti de la commande find, il est essentiel d’adopter
des pratiques qui garantissent la fiabilité, la sécurité et la
performance de vos recherches, surtout en environnement de production.
Rediriger les erreurs
Pour éviter que les messages d’erreur polluent l’affichage, surtout lors de recherches sur tout le système :
find / -type f -name "*.conf" 2>/dev/nullCela masque les erreurs liées aux permissions refusées.
Toujours tester avec -print avant d’agir
Avant d’utiliser une commande destructive comme rm ou chmod, vérifiez les
fichiers ciblés :
find . -name "*.bak" -printPuis seulement après validation :
find . -name "*.bak" -exec rm {} \;Protéger les chemins avec guillemets
Utilisez toujours des guillemets autour des motifs :
find . -name "*.sh"Cela évite que le shell n’expande les jokers avant find.
Sécuriser les actions avec -ok
Pour toute commande risquée (comme supprimer ou modifier en masse), préférez
-ok :
find . -name "*.log" -ok rm {} \;Utiliser xargs avec -print0 pour plus de robustesse
Pour traiter les noms de fichiers contenant des espaces ou des caractères spéciaux :
find . -type f -print0 | xargs -0 rmUtiliser des chemins absolus dans les scripts
Évitez les chemins relatifs dans les cron jobs ou scripts automatisés :
find /var/backups -type f -mtime +30 -exec rm {} \;Ces bonnes pratiques rendent vos recherches avec find plus précises,
sécurisées et adaptées aux environnements critiques, en évitant les
erreurs fréquentes ou les suppressions accidentelles.
Exercices pratiques : maîtriser la commande find sous Linux
La commande find est un outil incontournable pour rechercher et filtrer des
fichiers ou répertoires sous Linux. Elle est particulièrement utile en
administration système pour gagner du temps et automatiser des actions sur de
grandes structures de fichiers.
Je vous propose de vous exercer avec une série de manipulations guidées pour
découvrir toutes les possibilités de find, puis de relever un challenge
final pour valider vos compétences.
👉 Travaux pratiques : TP 02-04 : Manipuler les fichiers avec
find ↗
Ces exercices couvrent notamment :
- Recherche par nom, sensible ou non à la casse
- Filtrage par type d’élément (fichier, dossier, lien symbolique…)
- Sélection par taille ou vide
- Recherche par date de modification
- Exécution de commandes sur les fichiers trouvés avec
-exec
Vous apprendrez à :
- Gérer de grands arborescences rapidement
- Appliquer des actions ciblées à des fichiers
- Automatiser des nettoyages ou des permissions
Une fois ces exercices terminés, un challenge final vous permettra de mettre en application l’ensemble des fonctionnalités apprises.
Pourquoi pratiquer ?
Travailler avec find vous permet :
- De localiser des fichiers précis en quelques secondes
- D’automatiser des tâches avec des scripts simples
- D’être plus efficace dans la gestion de fichiers volumineux
Suivez les consignes en ligne, expérimentez les différentes options, et utilisez
man find pour approfondir votre maîtrise.
Contrôle de connaissances
Pourquoi ce contrôle ?
Cet contrôle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.
🕒 Le chronomètre commence dès que vous cliquez sur Démarrer le test. Vous devrez terminer l’examen avant la fin du temps imparti.
🎯 Pour réussir, vous devez obtenir au moins 80% de bonnes réponses.
💡 Je ne fournis pas directement les réponses aux questions. Cependant, si certaines sont complexes, des pistes d’explication pourront être proposées dans le guide ou après l’examen.
Bonne chance ! 🚀
Conclusion
La commande find est un outil essentiel pour quiconque travaille
régulièrement en ligne de commande. Grâce à sa souplesse et à sa richesse
fonctionnelle, elle permet de retrouver, filtrer et manipuler efficacement des
fichiers dans n’importe quelle arborescence. Que ce soit pour une recherche
rapide, un nettoyage automatisé ou un audit de permissions, la maîtrise de
find fait gagner un temps précieux et renforce la qualité de vos scripts et
interventions système.