Find Cheat Sheet

Introduction

Cet aide-mémoire rassemble les utilisations les plus courantes de la commande find sous Linux. Que vous cherchiez des fichiers par nom, par taille, par date ou par permissions, vous trouverez ici les exemples pratiques pour localiser rapidement ce dont vous avez besoin dans votre arborescence de fichiers.

Syntaxe de base

find [chemin] [critères] [actions]

Exemple — chercher dans le répertoire courant :

find . -name "fichier.txt"

Chercher depuis la racine :

find / -name "fichier.txt"

Recherche par nom

Nom exact :

find . -name "fichier.txt"

Insensible à la casse :

find . -iname "fichier.txt"

Avec un joker :

find . -name "*.log"
find . -name "rapport_*"

Recherche par type

Fichiers uniquement :

find . -type f

Répertoires uniquement :

find . -type d

Liens symboliques :

find . -type l

Combiné :

find . -type f -name "*.sh"

Recherche par taille

Fichiers de plus de 100 Mo :

find . -size +100M

Fichiers de moins de 1 Ko :

find . -size -1k

Fichiers d’exactement 512 octets :

find . -size 512c

Unités disponibles : c (octets), k (Ko), M (Mo), G (Go)


Recherche par date

Modifiés dans les 7 derniers jours :

find . -mtime -7

Modifiés il y a plus de 30 jours :

find . -mtime +30

Accédés dans les dernières 24 heures :

find . -atime -1

Modifiés dans la dernière heure :

find . -mmin -60

Modifiés après un fichier de référence :

find . -newer reference.txt

Recherche par permissions

Fichiers avec les permissions exactes 644 :

find . -perm 644

Fichiers lisibles par tous :

find . -perm /o=r

Fichiers exécutables :

find . -perm /u+x

Fichiers SUID :

find / -perm -4000

Fichiers avec permission d’écriture pour tous (risque sécurité) :

find / -perm -o+w

Recherche par propriétaire

Fichiers appartenant à un utilisateur :

find . -user john

Fichiers appartenant à un groupe :

find . -group www-data

Fichiers sans propriétaire valide :

find . -nouser
find . -nogroup

Exécuter une commande sur les résultats

Afficher les détails de chaque résultat :

find . -name "*.txt" -exec ls -lh {} \;

Supprimer les fichiers trouvés :

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

Version plus rapide avec + (groupe les arguments) :

find . -name "*.log" -exec rm {} +

Utiliser xargs :

find . -name "*.txt" | xargs grep "mot-clé"

Avec xargs et fichiers contenant des espaces :

find . -name "*.txt" -print0 | xargs -0 grep "mot-clé"

Combiner des critères

ET (implicite) :

find . -type f -name "*.sh" -size +1k

OU :

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

Négation :

find . -not -name "*.log"
find . ! -name "*.log"

Grouper avec des parenthèses :

find . \( -name "*.jpg" -o -name "*.png" \) -size +1M

Contrôle de profondeur

Limiter la profondeur de recherche :

find . -maxdepth 2 -name "*.conf"

Partir d’une profondeur minimale :

find . -mindepth 2 -name "*.log"

Un seul niveau :

find . -maxdepth 1 -type f

Expressions régulières

Avec -regex (chemin complet) :

find . -regex ".*\.\(jpg\|png\)"

Insensible à la casse :

find . -iregex ".*rapport.*\.pdf"

Actions d’affichage

Affichage détaillé (équivalent ls -l) :

find . -name "*.sh" -ls

Afficher les chemins séparés par un octet nul :

find . -name "*.txt" -print0

Afficher avec un format personnalisé :

find . -type f -printf "%p %s\n"

Champs disponibles pour -printf :

%p   chemin du fichier
%f   nom du fichier
%s   taille en octets
%m   permissions (octal)
%u   propriétaire
%t   date de modification

Supprimer des fichiers

Supprimer directement avec -delete (plus rapide que -exec rm) :

find . -name "*.tmp" -delete

Supprimer les répertoires vides :

find . -type d -empty -delete

Commandes fréquentes

find . -name "*.log"                         # chercher par nom
find . -type f -mtime +30 -delete            # supprimer les fichiers > 30j
find . -size +100M                           # fichiers volumineux
find / -perm -4000 -type f                   # fichiers SUID
find . -type d -empty                        # répertoires vides
find . -name "*.sh" -exec chmod +x {} +     # rendre exécutables
find . -newer ref.txt -type f                # modifiés après ref.txt
find . -user john -type f                    # fichiers de john

Options globales utiles

-maxdepth N      limiter la profondeur à N niveaux
-mindepth N      ignorer les N premiers niveaux
-follow          suivre les liens symboliques
-xdev            rester sur le même système de fichiers
-not / !         négation d'un critère
-o               OU logique entre critères