La commande find est l'un des outils les plus puissants sous Linux. Elle permet de rechercher des fichiers et répertoires selon de nombreux critères : nom, type, taille, date, permissions, propriétaire, et bien plus.
find [chemin] [options] [action]Par défaut, find parcourt récursivement tous les sous-répertoires à partir du chemin indiqué.
find /home -name "rapport.txt"Recherche le fichier rapport.txt dans /home.
find /var/log -name "*.log"Recherche tous les fichiers se terminant par .log.
find /home -name "*.pdf"Recherche tous les fichiers PDF.
find /home -iname "README*"L'option -iname ignore la casse (README, readme, Readme...).
| Option | Description |
|---|---|
-type f | Fichiers réguliers |
-type d | Répertoires |
-type l | Liens symboliques |
-type s | Sockets |
-type p | FIFOs (tubes nommés) |
find /home -type d -name "Backup"Recherche un répertoire nommé "Backup".
find /var -type lListe tous les liens symboliques dans /var.
| Option | Description |
|---|---|
-size 100c | Exactement 100 octets |
-size +100c | Plus de 100 octets |
-size -100c | Moins de 100 octets |
-size 1M | Exactly 1 Mo |
-size +500M | Plus de 500 Mo |
-size -10G | Moins de 10 Go |
find /home -size +100MTrouve tous les fichiers de plus de 100 Mo dans /home.
find /var/log -size +1G -name "*.log"Trouve les fichiers log de plus de 1 Go.
| Option | Description |
|---|---|
-mtime n | Modifié il y a n jours |
-mtime +n | Modifié il y a plus de n jours |
-mtime -n | Modifié il y a moins de n jours |
-atime | Dernier accès |
-ctime | Dernier changement de statut |
-mmin | Minutes (au lieu de jours) |
find /home -mtime -7Trouve les fichiers modifiés dans les 7 derniers jours.
find /var/log -name "*.log" -mtime +30Trouve les fichiers log non modifiés depuis plus de 30 jours.
find /home -atime +365Trouve les fichiers non accédés depuis plus d'un an.
find /home -perm 644Trouve les fichiers avec les permissions exactes 644.
find /home -perm -200Trouve les fichiers qui ont au moins le bit d'écriture pour le propriétaire.
find /home -perm /222Trouve les fichiers accessibles en écriture par quelqu'un.
find /home -user davidTrouve les fichiers appartenant à l'utilisateur david.
find /home -group developersTrouve les fichiers belonging au groupe developers.
find /home -nouserTrouve les fichiers sans propriétaire valide (utilisateur supprimé).
find /home -name "*.txt" -size +1MTrouve les fichiers .txt de plus de 1 Mo.
find /home \( -name "*.jpg" -o -name "*.png" \)Trouve les fichiers JPEG ou PNG.
find /home -name "*.log" ! -mtime -7Trouve les fichiers .log non modifiés récemment (équivalent à +7).
find /home \( -name "*.doc" -o -name "*.docx" \) -mtime -30Trouve les documents Word modifiés dans les 30 derniers jours.
find /home -name "*.pdf" -lsAffiche un listing détaillé des résultats.
find /tmp -name "*.tmp" -deleteSupprime les fichiers temporaires trouvés. Attention : vérifiez d'abord sans -delete !
find /home -name "*.bak" -exec rm {} \;Supprime tous les fichiers .bak. Le {} est remplacé par le nom du fichier trouvé.
find /home -name "*.jpg" -exec cp {} /backup/photos/ \;Copie tous les fichiers JPEG vers /backup/photos/.
find /home -name "*.tmp" -ok rm {} \;Demande confirmation avant de supprimer chaque fichier.
find /home -name "*.log" | xargs tar -czf logs.tar.gzArchive tous les fichiers log trouvés.
find /home -maxdepth 2 -name "*.txt"Recherche uniquement dans les 2 premiers niveaux de répertoires.
find /home -mindepth 3 -name "*.txt"Recherche uniquement à partir du 3ème niveau.
find /home -maxdepth 1 -type dListe uniquement les répertoires immédiats de /home.
find /home -emptyTrouve les fichiers et répertoires vides.
find /tmp -empty -deleteSupprime tous les fichiers et répertoires vides dans /tmp.
find /home -type f -size +100M -exec ls -lh {} \;Affiche详细信息 des fichiers de plus de 100 Mo.
find /home -user david -mtime -1 -lsAffiche les fichiers modifiés aujourd'hui par david.
find /tmp -name "*.tmp" -atime +7 -deleteSupprime les fichiers temporaires non accédés depuis 7 jours.
find /home -type l ! -exec test -e {} \; -printTrouve les liens symboliques qui pointent vers des fichiers inexistants.
find /home -inum 12345678Trouve le fichier avec l'inode 12345678 (utile pour supprimer les fichiers spéciaux).
find /var/www -mtime -7 -type f | tar -czf backup-web.tar.gz -T -Crée une archive de tous les fichiers du site web modifiés cette semaine.
| Option | Description |
|---|---|
-name | Recherche par nom de fichier |
-iname | Recherche par nom (insensible à la casse) |
-path | Recherche dans le chemin complet |
-ipath | Comme -path mais insensible à la casse |
-regex | Expression régulière sur le chemin complet |
-iregex | Comme -regex mais insensible à la casse |
-maxdepth n | Limite la profondeur de recherche |
-mindepth n | Commence à au moins n niveaux de profondeur |
-mount | Ne traverse pas les points de montage |
Pour les recherches fréquentes ou sur de grandes arborescences, quelques conseils :
-maxdepth pour limiter la profondeur si possiblelocate peut être plus rapide (base de données), mais find est toujours à jour# Mettre à jour la base locate (si installé)
sudo updatedb
# Recherche rapide par nom
locate rapport.txtLa commande find est un outil极为 puissant pour rechercher des fichiers selon de multiples critères. Combinez les options pour créer des recherches très précises, et utilisez -exec ou xargs pour effectuer des actions sur les résultats.
L'essentiel à retenir :
find /chemin -name "*.ext" — recherche basique par extension-type f/d/l — filtre par type de fichier-size +100M — filtre par taille-mtime -7 — filtre par date de modification-exec cmd {} \; — exécute une commande sur chaque résultat-delete — supprime les fichiers trouvés (avec prudence !)