Recherche de base
Utiliser find
find . # list all files recursively find /var/log # search from specific path find . -name "*.txt" # find by name find / -name "config" 2>/dev/null # suppress permission errors find dir1 dir2 -name "*.py" # search multiple directories
Syntaxe générale
find [path...] [tests] [actions]Forme générale — chemins, puis tests, puis actions
pathRépertoire de départ (défaut : répertoire courant)
testCondition pour filtrer les fichiers (-name, -type, etc.)
actionCe qu'il faut faire avec les correspondances (-print, -exec, etc.)
Action par défaut-print si aucune action n'est spécifiée
Patterns de noms
Correspondance par nom
find . -name "*.log" # case-sensitive glob find . -iname "readme*" # case-insensitive glob find . -name "*.py" -o -name "*.js" # OR: Python or JS files find . -path "*/src/*.ts" # match against full path find . -regex '.*\.\(py\|js\)' # POSIX regex on full path
Tests de nom
-name patternLe nom de base correspond au glob shell (sensible à la casse)
-iname patternLe nom de base correspond au glob (insensible à la casse)
-path patternLe chemin complet correspond au glob shell
-ipath patternLe chemin complet correspond au glob (insensible à la casse)
-regex patternLe chemin complet correspond à l'expression régulière
-iregex patternLe chemin complet correspond à la regex (insensible à la casse)
Filtres de type
Filtrer par type
find . -type f # regular files only find . -type d # directories only find . -type l # symbolic links find . -type f -name "*.sh" # combine type + name
Types de fichiers
-type fFichier ordinaire
-type dRépertoire
-type lLien symbolique
-type bPériphérique bloc
-type cPériphérique caractère
-type pTube nommé (FIFO)
-type sSocket
-emptyFichier ou répertoire vide
Taille et date
Exemples de taille et date
find . -size +100M # larger than 100 MB find . -size -1k # smaller than 1 KB find . -mtime -7 # modified in last 7 days find . -mmin -30 # modified in last 30 minutes find . -newer reference.txt # newer than reference file
Tests de taille et date
-size +/-NcTaille en octets (c), kilooctets (k), mégaoctets (M), gigaoctets (G)
-mtime +/-NModifié il y a N*24 heures (+plus ancien, -plus récent)
-atime +/-NAccédé il y a N*24 heures
-ctime +/-NStatut changé il y a N*24 heures
-mmin +/-NModifié il y a N minutes
-newer fileModifié plus récemment que file
-newermt dateModifié après la chaîne de date (GNU)
Permissions
Exemples de permissions
find . -perm 644 # exact permissions: rw-r--r-- find . -perm -u+x # user has execute bit set find . -perm /o+w # others have write (any match) find . -user root # owned by root find . -group www-data -type f # owned by group
Tests de permissions
-perm modeCorrespondance exacte des permissions
-perm -modeTous les bits spécifiés sont définis
-perm /modeAu moins un des bits spécifiés est défini
-user nameAppartenant à l'utilisateur (nom ou UID)
-group nameAppartenant au groupe (nom ou GID)
-nouserAucun utilisateur correspondant dans /etc/passwd
-nogroupAucun groupe correspondant dans /etc/group
Actions
Exemples d'actions
find . -name "*.log" -print # print paths (default) find . -name "*.tmp" -delete # delete matching files find . -type f -ls # detailed listing find . -name "*.txt" -print0 # null-delimited output find . -type f -printf "%p %s\n" # custom format (GNU)
Référence des actions
-printAfficher le chemin (délimité par des sauts de ligne)
-print0Afficher le chemin (délimité par des nulls, sûr pour xargs)
-lsAfficher les détails du fichier (comme ls -dils)
-deleteSupprimer les fichiers correspondants (implique -depth)
-printf formatFormat de sortie personnalisé (GNU) : %p chemin, %s taille, %t date
-fprint fileÉcrire les chemins dans un fichier
-quitQuitter après la première correspondance
Combiner les tests
Opérateurs logiques
find . -name "*.py" -type f # implicit AND find . -name "*.py" -a -size +10k # explicit AND find . -name "*.py" -o -name "*.js" # OR find . ! -name "*.log" # NOT find . \( -name "*.py" -o -name "*.js" \) -type f
Référence des opérateurs
expr1 expr2 / expr1 -a expr2ET — les deux doivent être vrais (défaut)
expr1 -o expr2OU — l'un ou l'autre doit être vrai
! expr / -not exprNON — nier l'expression
\( expr \)Grouper les expressions (échapper les parenthèses dans le shell)
Ordre d'évaluationDe gauche à droite ; -a lie plus fort que -o
Exec et suppression
Exemples avec exec
find . -name "*.sh" -exec chmod +x {} \; find . -name "*.log" -exec rm {} + find . -type f -exec grep -l "TODO" {} + find . -name "*.bak" -ok rm {} \; # prompt before each find . -name "*.tmp" -print0 | xargs -0 rm
Référence exec
-exec cmd {} \;Exécuter cmd une fois par fichier ({} = chemin du fichier)
-exec cmd {} +Exécuter cmd avec plusieurs fichiers à la fois (plus rapide)
-ok cmd {} \;Comme -exec mais demande confirmation
-execdir cmd {} \;Exécuter cmd depuis le répertoire du fichier
xargs -0Associer à -print0 pour un traitement par lots sécurisé
-deleteSupprimer les fichiers ; traiter les plus profonds en premier
Profondeur et élagage
Exemples de profondeur et élagage
find . -maxdepth 1 -type f # current dir only find . -mindepth 2 -name "*.py" # skip top-level find . -name ".git" -prune -o -print # skip .git dirs find . -depth -name "*.tmp" -delete # process children first
Options de profondeur
-maxdepth NDescendre au plus N niveaux (0 = chemin de départ seulement)
-mindepth NNe pas appliquer les tests aux niveaux inférieurs à N
-depthTraiter le contenu du répertoire avant le répertoire lui-même
-pruneNe pas descendre dans le répertoire correspondant
-mount / -xdevNe pas traverser les frontières du système de fichiers
-follow / -LSuivre les liens symboliques
Patterns courants
Commandes en une ligne
find . -name "*.pyc" -delete # clean Python bytecode find . -type f -size 0 -delete # remove empty files find . -mtime +30 -name "*.log" -delete # purge old logs find . -type f -name "*.md" | wc -l # count Markdown files find . -type d -empty -delete # remove empty dirs
Recettes
Trouver les fichiers les plus grandsfind . -type f -printf '%s %p\n' | sort -rn | head
Trouver les doublons par nomfind . -type f | awk -F/ '{print $NF}' | sort | uniq -d
Renommer l'extensionfind . -name '*.txt' -exec rename 's/.txt/.md/' {} +
Trouver les liens symboliques cassésfind . -xtype l
Archiver les fichiers récentsfind . -mtime -7 -print0 | tar czf recent.tar.gz --null -T -
Chercher dans les fichiers de codefind . -name '*.py' -exec grep -l 'pattern' {} +