Guide complet de la commande find sous Linux

Introduction

Dans un environnement Linux, trouver et traiter rapidement les fichiers souhaités constitue une compétence fondamentale et indispensable pour l’administration système et le développement. Dans cet article, nous explorerons pas à pas, à travers des cas pratiques, les options de base de la commande find, la recherche basée sur la taille ou la date de modification des fichiers, ainsi que l’exécution d’actions par lots sur les résultats de recherche (-exec).

Configuration de l’environnement de test et recherche de base par nom de fichier

Pour créer un répertoire dédié aux tests de la commande find et vous y déplacer, exécutez la commande mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab.

mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab

Pour créer des fichiers d’exemple avec diverses extensions à utiliser lors des tests de recherche, exécutez la commande touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak.

touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak

La commande find recherche récursivement tous les fichiers et répertoires situés sous le chemin spécifié en fonction de critères définis.
Lorsque vous exécutez la commande find . -name "*.log", tous les fichiers se terminant par l’extension .log par rapport au répertoire courant (.) sont recherchés et affichés avec leur chemin d’accès.
À ce stade, pour éviter que le caractère générique (*) ne soit développé au préalable par le shell, le motif de recherche doit être entouré de guillemets doubles.
⚙️ [Options principales]

-name : Recherche les éléments correspondant au nom ou au motif de fichier spécifié en respectant la casse.
-iname : Recherche les éléments correspondant au nom ou au motif de fichier spécifié sans tenir compte de la casse.
-type : Spécifie le type de fichier à rechercher (f pour un fichier ordinaire, d pour un répertoire).
-size : Recherche en fonction de la taille du fichier (+ pour supérieur à, - pour inférieur à).
-mtime : Recherche en fonction de la date de dernière modification du contenu du fichier (en jours).
-empty : Recherche les fichiers ou répertoires vides.
-exec : Exécute une commande Linux spécifiée sur chacun des fichiers trouvés.
-delete : Supprime immédiatement les fichiers correspondant aux critères de recherche.

find . -name “*.log”

Pour rechercher un nom de fichier sans tenir compte de la casse, utilisez l’option -iname et exécutez la commande find . -iname "GUIDE.TXT".
Même si le nom réel du fichier est en minuscules (guide.txt), il correspond au critère de recherche en majuscules et le chemin du fichier s’affiche correctement.

find . -iname “GUIDE.TXT”

Recherche de fichiers volumineux par type et critères de taille

Pour tester la recherche basée sur la taille des fichiers, exécutez la commande truncate -s 15M ~/find_lab/backup/large_archive.iso afin de générer un fichier d’exemple volumineux de 15 Mo.

truncate -s 15M ~/find_lab/backup/large_archive.iso

Pour un exercice de comparaison de taille supplémentaire, exécutez la commande truncate -s 2M ~/find_lab/logs/big_trace.log afin de créer un fichier journal d’exemple de 2 Mo.

truncate -s 2M ~/find_lab/logs/big_trace.log

Pour exclure les fichiers ordinaires et filtrer uniquement les répertoires, appliquez l’option -type d et exécutez la commande find ~/find_lab -type d.
Seule la liste de tous les répertoires existant sous le chemin spécifié s’affiche clairement.

find ~/find_lab -type d

Pour rechercher les fichiers ordinaires (-type f) d’une taille supérieure à 10 Mo (-size +10M) tout en affichant leurs informations détaillées, exécutez la commande find ~/find_lab -type f -size +10M -exec ls -lh {} +.
Le fichier large_archive.iso d’une taille de 15 Mo correspondant au critère est trouvé et s’affiche avec ses permissions détaillées et sa taille.

find ~/find_lab -type f -size +10M -exec ls -lh {} +

Recherche de fichiers modifiés selon des critères temporels (mtime/mmin)

Pour tester la recherche de fichiers selon le temps écoulé, exécutez la commande touch -d "2 days ago" ~/find_lab/backup/old_backup.tar afin de générer un fichier d’exemple modifié il y a deux jours.

touch -d “2 days ago” ~/find_lab/backup/old_backup.tar

Pour tester la recherche de fichiers récemment modifiés, exécutez la commande touch ~/find_lab/logs/recent.log afin de créer un fichier d’exemple doté de l’horodatage actuel.

touch ~/find_lab/logs/recent.log

Pour rechercher les fichiers ordinaires modifiés au cours des dernières 24 heures, appliquez l’option -mtime -1 et exécutez la commande find ~/find_lab -type f -mtime -1.
La liste de tous les fichiers créés ou modifiés dans l’intervalle de référence (24 heures) s’affiche correctement.

find ~/find_lab -type f -mtime -1

Pour rechercher les fichiers anciens modifiés depuis plus de 24 heures (1 jour), appliquez l’option -mtime +1 et exécutez la commande find ~/find_lab -type f -mtime +1.
Seul le fichier old_backup.tar, créé avec une date antérieure de deux jours, est filtré et affiché avec précision.

find ~/find_lab -type f -mtime +1

Gestion par lots des résultats de recherche : option -exec et suppression

Pour effectuer des opérations de gestion par lots et de modification de permissions, exécutez la commande mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp afin de créer un répertoire temporaire et des fichiers temporaires d’exemple.

mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp

Pour modifier en bloc les permissions d’accès de tous les fichiers portant l’extension .tmp à 644, appliquez l’option -exec et exécutez la commande find ~/find_lab/temp -name "*.tmp" -exec chmod 644 {} \;.
Le symbole {} est remplacé par le chemin de chaque fichier trouvé, et \; marque la fin de la commande transmise à la clause -exec.

find ~/find_lab/temp -name “*.tmp” -exec chmod 644 {} ;

Pour vérifier que la modification des permissions a été correctement appliquée, exécutez la commande ls -l ~/find_lab/temp.
Le résultat confirme que les deux fichiers temporaires disposent désormais des permissions de lecture et écriture (-rw-r--r--, 644).

ls -l ~/find_lab/temp

Pour supprimer en bloc les fichiers .tmp correspondant aux critères de recherche, associez la commande rm -f en exécutant find ~/find_lab/temp -name "*.tmp" -exec rm -f {} \;.
Les fichiers cibles trouvés sont supprimés en une seule opération sans demande de confirmation supplémentaire.

find ~/find_lab/temp -name “*.tmp” -exec rm -f {} ;

Pour vérifier définitivement que tous les fichiers temporaires ont bien été supprimés, exécutez la commande ls -la ~/find_lab/temp.
Seuls le répertoire courant (.) et le répertoire parent (..) subsistent, confirmant que tous les fichiers temporaires créés ont été nettoyés avec succès.

ls -la ~/find_lab/temp

Nous avons passé en revue les options de recherche essentielles de la commande find sous Linux ainsi que les techniques de traitement par lots immédiatement applicables en pratique.
N’hésitez pas à combiner ces différentes options selon vos besoins pour rendre vos opérations de recherche et de gestion de fichiers encore plus efficaces.