← Sommaire SkyLinux

find — Recherche avancée de fichiers

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.

Syntaxe de base

find [chemin] [options] [action]

Par défaut, find parcourt récursivement tous les sous-répertoires à partir du chemin indiqué.

Recherche par nom

Recherche par nom exact

find /home -name "rapport.txt"

Recherche le fichier rapport.txt dans /home.

Recherche avec joker (pattern)

find /var/log -name "*.log"

Recherche tous les fichiers se terminant par .log.

find /home -name "*.pdf"

Recherche tous les fichiers PDF.

Insensible à la casse

find /home -iname "README*"

L'option -iname ignore la casse (README, readme, Readme...).

Recherche par type

OptionDescription
-type fFichiers réguliers
-type dRépertoires
-type lLiens symboliques
-type sSockets
-type pFIFOs (tubes nommés)
find /home -type d -name "Backup"

Recherche un répertoire nommé "Backup".

find /var -type l

Liste tous les liens symboliques dans /var.

Recherche par taille

OptionDescription
-size 100cExactement 100 octets
-size +100cPlus de 100 octets
-size -100cMoins de 100 octets
-size 1MExactly 1 Mo
-size +500MPlus de 500 Mo
-size -10GMoins de 10 Go
find /home -size +100M

Trouve 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.

Recherche par date

OptionDescription
-mtime nModifié il y a n jours
-mtime +nModifié il y a plus de n jours
-mtime -nModifié il y a moins de n jours
-atimeDernier accès
-ctimeDernier changement de statut
-mminMinutes (au lieu de jours)
find /home -mtime -7

Trouve les fichiers modifiés dans les 7 derniers jours.

find /var/log -name "*.log" -mtime +30

Trouve les fichiers log non modifiés depuis plus de 30 jours.

find /home -atime +365

Trouve les fichiers non accédés depuis plus d'un an.

Recherche par permissions

find /home -perm 644

Trouve les fichiers avec les permissions exactes 644.

find /home -perm -200

Trouve les fichiers qui ont au moins le bit d'écriture pour le propriétaire.

find /home -perm /222

Trouve les fichiers accessibles en écriture par quelqu'un.

Recherche par propriétaire

find /home -user david

Trouve les fichiers appartenant à l'utilisateur david.

find /home -group developers

Trouve les fichiers belonging au groupe developers.

find /home -nouser

Trouve les fichiers sans propriétaire valide (utilisateur supprimé).

Combinaison de critères

Opérateur AND (implicite)

find /home -name "*.txt" -size +1M

Trouve les fichiers .txt de plus de 1 Mo.

Opérateur OR

find /home \( -name "*.jpg" -o -name "*.png" \)

Trouve les fichiers JPEG ou PNG.

Négation

find /home -name "*.log" ! -mtime -7

Trouve les fichiers .log non modifiés récemment (équivalent à +7).

Combiner avec AND/OR

find /home \( -name "*.doc" -o -name "*.docx" \) -mtime -30

Trouve les documents Word modifiés dans les 30 derniers jours.

Actions sur les résultats

Lister avec -ls

find /home -name "*.pdf" -ls

Affiche un listing détaillé des résultats.

Supprimer avec -delete

find /tmp -name "*.tmp" -delete

Supprime les fichiers temporaires trouvés. Attention : vérifiez d'abord sans -delete !

Exécuter une commande avec -exec

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/.

Confirmer avant action avec -ok

find /home -name "*.tmp" -ok rm {} \;

Demande confirmation avant de supprimer chaque fichier.

Importer dans une variable avec xargs

find /home -name "*.log" | xargs tar -czf logs.tar.gz

Archive tous les fichiers log trouvés.

Limiter la profondeur de recherche

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 d

Liste uniquement les répertoires immédiats de /home.

Recherche vide

find /home -empty

Trouve les fichiers et répertoires vides.

find /tmp -empty -delete

Supprime tous les fichiers et répertoires vides dans /tmp.

Exemples pratiques

Trouver les gros fichiers

find /home -type f -size +100M -exec ls -lh {} \;

Affiche详细信息 des fichiers de plus de 100 Mo.

Trouver les fichiers récents d'un utilisateur

find /home -user david -mtime -1 -ls

Affiche les fichiers modifiés aujourd'hui par david.

Nettoyer les fichiers temporaires vieux

find /tmp -name "*.tmp" -atime +7 -delete

Supprime les fichiers temporaires non accédés depuis 7 jours.

Trouver les liens cassés

find /home -type l ! -exec test -e {} \; -print

Trouve les liens symboliques qui pointent vers des fichiers inexistants.

Trouver par inode

find /home -inum 12345678

Trouve le fichier avec l'inode 12345678 (utile pour supprimer les fichiers spéciaux).

Archiver les fichiers modifiés récemment

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.

Options utiles

OptionDescription
-nameRecherche par nom de fichier
-inameRecherche par nom (insensible à la casse)
-pathRecherche dans le chemin complet
-ipathComme -path mais insensible à la casse
-regexExpression régulière sur le chemin complet
-iregexComme -regex mais insensible à la casse
-maxdepth nLimite la profondeur de recherche
-mindepth nCommence à au moins n niveaux de profondeur
-mountNe traverse pas les points de montage

Performance

Pour les recherches fréquentes ou sur de grandes arborescences, quelques conseils :

# Mettre à jour la base locate (si installé) sudo updatedb # Recherche rapide par nom locate rapport.txt

Résumé

La 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 :