Maîtriser la commande find pour la recherche avancée de fichiers

Description

Programme permettant de localiser des fichiers sur le système en se basant sur des critères tels que le nom, les attributs, la date de modification ou le propriétaire.

Options de recherche

Option Fonction
-name Rechercher par nom de fichier, compatible avec les expressions régulières
-iname Recherche insensible à la casse (la recherche par défaut y est sensible)
-size Filtrer par taille : plus grand (+), plus petit (-)
chemin Répertoire de recherche (par défaut, le répertoire courant)
-group Rechercher par groupe d'appartenance
-user Rechercher par propriétaire (utilisateur)
-type Filtrer par type de fichier (d pour répertoire, f pour fichier ordinaire)
-mtime Rechercher selon la date de modification du contenu
-perm Rechercher selon les permissions du fichier
-a Opérateur ET logique (ex: plus de 2M et moins de 4M)
-o Opérateur OU logique
-prune -o Exclure des chemins de la recherche. Exemple : find / -path "/media" -prune -o -name config (exclut le répertoire /media)
xargs Passer les résultats à une autre commande pour traitement (ex: suppression). Peut être combiné avec grep pour chercher dans le contenu des fichiers.
-exec Exécuter une commande sur chaque fichier trouvé (ex: suppression).

Exemples pratiques

Lister tous les fichiers d'un répertoire utilisateur

Affiche récursivement tout le contenu de /home/jean.

$ find /home/jean
/home/jean
/home/jean/documents
/home/jean/documents/rapport.pdf
/home/jean/images
/home/jean/images/vacance.jpg

Recherche par nom avec motif

Trouve tous les fichiers dont le nom contient "photo".

$ find /home -name '*photo*'
/home/jean/images/vacance_photo.jpg
/home/jean/bureau/photo_souvenir.png

Recherche avec exclusion d'un répertoire

Cherche dans tout le système en ignorant le dossier /proc.

$ find / -path "/proc" -prune -o -name "auth.log" -print
/var/log/auth.log

Afficher les détails des fichiers trouvés

Combine la recherche avec la commande ls pour obtenir des informations détaillées.

$ find /var/log -name '*.log' -ls
-rw-r----- 1 syslog adm 45210 Mar 5 09:15 /var/log/syslog

Supprimer des fichiers temporaires

Supprime tous les fichiers nommés tmp_*.bak dans le répertoire /tmp.

$ find /tmp -name "tmp_*.bak" -type f -print0 | xargs -0 /bin/rm -f

Recherche et suppression avec -exec

Supprime tous les fichiers se terminant par .tmp en ignorant la casse.

$ find /tmp -iname "*.tmp" -exec rm -f {} \;

Chercher du texte dans les fichiers trouvés

Recherche la chaîne "192.168" dans tous les fichiers de configuration sous /etc.

$ find /etc -name "*.conf" -type f | xargs grep "192\.168"
/etc/network/interfaces:    address 192.168.1.10
/etc/hosts:192.168.1.1  server-local

Autres exemples de combinaisons courantes

$ find /home -mtime -7 -name "*.txt"          # Fichiers txt modifiés dans les 7 derniers jours
$ find / -user root -group root -type f        # Fichiers appartenant à root:root
$ find . -perm -644 -type f                    # Fichiers avec au moins les permissions 644
$ find . -size +100M -exec du -sh {} \;        # Afficher la taille des fichiers de plus de 100Mo
$ find . -name "*.py" -exec python3 -m py_compile {} \;  # Compiler les fichiers Python trouvés

Consultez la page de manuel (man find) pour une liste exhaustive des options et opérateurs.

Étiquettes: commande find Linux Shell recherche de fichiers administration système

Publié le 15 juin à 18h50