
« Dans un précédent article, nous avons vu comment grep pouvait fouiller à l’intérieur de vos fichiers pour en extraire des pépites d’informations. C’est un outil formidable, mais il a une limite : pour fouiller dans un fichier, encore faut-il savoir où il se cache !
Nous avons tous vécu ce moment de solitude devant notre terminal : "Je sais que j'ai enregistré ce compte-rendu hier, je sais qu'il s'appelle 'devis' quelque chose... mais où est-il ?"
grep commence à s'essoufflerAvant de passer à find, on peut naturellement essayer de tout faire avec grep. Après tout, il possède une option pour fouiller dans les dossiers : la récursivité (-r).
Si vous cherchez le mot "facture" dans tout votre dossier "Documents", vous taperiez : grep -r "facture" ~/Documents
Le problème ? Dans une architecture dense (des milliers de dossiers, des bibliothèques de codes, des fichiers cachés ou des dossiers de cache énormes comme node_modules), grep va perdre un temps infini à ouvrir chaque fichier pour lire son contenu, même ceux qui n'ont aucune chance d'être les bons (images, binaires, fichiers de log gigantesques).
C'est là que le doute s'installe : est-ce vraiment efficace de demander à un traducteur (grep) de fouiller toute une bibliothèque, alors qu'on a juste besoin d'un bibliothécaire (find) pour nous dire où sont les livres qui datent de moins d'un mois ?
find est plus malin dans ce cas ?Contrairement à grep, find ne lit pas le contenu des fichiers. Il se contente de lire les "métadonnées" (le nom, la date, la taille, l'extension).
find, on peut dire : "Ne cherche que dans les fichiers .txt, ignore les dossiers de cache, et ne regarde que ceux qui pèsent moins de 1 Mo".Une fois que find a fait ce tri intelligent, là on peut donner la liste ultra-réduite à grep. C'est le travail d'équipe parfait.
Sous Windows ou macOS, on lance une recherche Spotlight ou Cortana qui fait ventiler l'ordinateur pendant trois minutes. Sous Linux, on a find.
Si grep est votre microscope pour inspecter le contenu, find est votre radar de haute précision pour scanner votre disque dur. Que vous cherchiez un fichier par son nom, par sa taille (pour faire de la place) ou même par sa date de création, find répond instantanément.
Dans cet article, je vais vous montrer comment cet outil "ancêtre" du système Linux reste aujourd'hui la méthode la plus rapide et la plus efficace pour garder la main sur vos données. Prêts à devenir les Sherlock Holmes de votre arborescence ?
Imaginons que vous cherchiez une photo de vos dernières vacances en Bretagne. Vous savez qu’elle est au format JPG, qu'elle est assez lourde (donc une photo de haute qualité et non une simple icône) et qu'elle a été prise il y a environ 6 mois.
Plutôt que de faire défiler des milliers de miniatures dans votre explorateur de fichiers, nous allons utiliser un "tuyau" (le Pipe |) pour filtrer les résultats.
find . -name "*.jpg" -mtime +150 -mtime -365 -size +2M | grep -i "bretagne"
find . : "Cherche ici" (le point représente le dossier actuel et tous ses sous-dossiers).-name "*.jpg" : "Ne regarde que les fichiers qui se terminent par .jpg".-size +2M : "Ne retiens que les fichiers de plus de 2 Mo" (on élimine ainsi les miniatures et les petites images du web).-mtime +150 : Signifie "modifié il y a plus de 150 jours" (on élimine les photos récentes de cet automne).-mtime -365 : Signifie "modifié il y a moins de 365 jours" (on élimine les photos des années précédentes).| (le Pipe) : C'est notre fameux tuyau. Il dit à Linux : "Ne m'affiche pas encore le résultat de find, envoie-le plutôt à l'outil suivant."grep -i "bretagne" : "Parmi les fichiers trouvés par find, affiche-moi uniquement ceux dont le nom contient 'bretagne'". (L'option -i permet d'ignorer la casse : il trouvera "Bretagne", "BRETAGNE" ou "bretagne").Sous Linux, un fichier ne possède pas qu'une seule date, mais trois "horodatages" différents. Dans notre exemple de la Bretagne, nous avons utilisé -mtime (la modification), mais il existe une autre option très utile :
-mtime (Modification) : C’est la date où le contenu du fichier a été modifié pour la dernière fois.-atime (Access) : C’est la date de dernière consultation.Imaginez que vous vouliez faire le ménage sur votre disque dur. Vous avez des centaines de fichiers PDF, certains sont vieux de 3 ans mais vous les consultez tous les jours pour le travail. D'autres ont été téléchargés il y a 6 mois mais vous ne les avez jamais ouverts.
Avec find, vous pouvez débusquer ces fichiers "fantômes" qui prennent de la place pour rien :
find ~/Documents -name "*.pdf" -atime +365
Traduction : "Trouve-moi tous les PDF que je n'ai pas ouverts (lus) depuis plus d'un an."
C'est une nuance que les explorateurs de fichiers classiques (Windows/Mac) cachent souvent, mais que la commande find linux vous permet d'exploiter pour une gestion chirurgicale de votre espace de stockage.
Jusqu'ici, nous avons cherché des fichiers par leur nom ou leur date. Mais que faire si vous cherchez une information précise à l'intérieur d'un fichier, et uniquement dans un certain type de documents ?
C'est ici que le duo Find + Grep devient une arme redoutable pour un développeur ou un curieux. Imaginons que vous cherchiez la fonction ma_fonction uniquement dans vos fichiers PHP, en ignorant les images ou les fichiers de cache qui polluent les résultats.
La commande magique : find . -name "*.php" -exec grep -H "ma_fonction" {} \;
Décryptage de la syntaxe :
-name "*.php" : On cible uniquement les fichiers avec l'extension .php.-exec ... {} : C'est l'ordre de passer chaque fichier trouvé à la commande suivante. Les accolades {} représentent le fichier que Find vient de débusquer.grep -H : On demande à Grep de chercher le texte, et l'option -H lui ordonne d'afficher le nom du fichier devant chaque résultat (indispensable pour savoir où se trouve l'info !).\; : C'est le point final de l'instruction. Le backslash \ sert à dire au terminal : "Ne touche pas à ce point-virgule, il est pour la commande Find !".| plutôt que tout faire avec la commande find linux ?Vous allez me dire : "Mais Find a aussi une option pour chercher dans le nom !". C'est vrai. Mais l'utilisation du Pipe avec Grep offre deux avantages énormes pour un débutant :
grep est bien plus souple pour filtrer du texte. Vous pouvez enchaîner les filtres : | grep "2023" | grep -v "miniature".Le saviez-vous ? Le Pipe est l'incarnation de la philosophie Linux : "Faire une seule chose, mais la faire bien".
findtrouve,grepfiltre. Ensemble, ils sont imbattables.
|) ou Exec (-exec) : Quel outil choisir ?C’est la question qui sépare souvent l'utilisateur occasionnel de l'expert. Pour bien comprendre, imaginons que nos fichiers soient des courriers.
|) : Le FiltreLe Pipe sert à transmettre du texte. C'est un tuyau.
find donne une liste de noms de fichiers, et le Pipe envoie cette liste de noms à grep pour qu'il la trie.| wc -l), ou trier par ordre alphabétique (| sort).-exec) : L'ActionLe paramètre -exec sert à exécuter une action réelle sur chaque fichier trouvé.
.tmp et supprime-les."find . -name "*.tmp" -exec rm {} \;L'astuce de Sherlock : > Dans la commande
-exec ... {} \;, les accolades{}représentent le fichier trouvé. C'est comme si vous disiez à Linux : "Prends ce fichier précis et fais-lui ça".
« Vous l’avez vu, avec la commande find linux et grep, vous avez désormais entre les mains le radar et le microscope du système Linux. En combinant la puissance de recherche de l'un avec la finesse de filtrage de l'autre grâce au pipe (|), plus aucun fichier ne peut vous échapper, même dans une architecture dense et désordonnée.
C’est puissant, c’est précis, et c’est d’une efficacité redoutable pour votre machine. Mais, je vous l'accorde : taper ces commandes peut parfois sembler un peu rigide si l'on n'a pas encore mémorisé tous les paramètres sur le bout des doigts.
Et s'il existait un outil capable de vous offrir cette puissance, mais de manière interactive ? Imaginez une recherche qui s'affine en temps réel, à chaque lettre tapée, avec une prévisualisation de vos fichiers, le tout sans quitter votre terminal...
C'est ce que nous découvrirons dans le prochain article avec le "Saint Graal" de la recherche moderne : FZF (le Fuzzy Finder).
D'ici là, n'hésitez pas à tester vos premières enquêtes avec find ! Si vous souhaitez explorer des options encore plus avancées, je vous recommande de jeter un œil à la documentation Ubuntu-fr
ou de tester vos commandes sur Explainshell.