
« 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 ? »
La transition : Quand grep commence à s’essouffler
Avant 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 ?
commande find linux : Pourquoi 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).
- Vitesse : Scanner 100 000 noms de fichiers est instantané. Lire le contenu de 100 000 fichiers est interminable.
- Précision : Avec
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 ?
Le scénario : « Le détective des souvenirs »
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.
La commande combinée :
find . -name "*.jpg" -mtime +150 -mtime -365 -size +2M | grep -i "bretagne"
Décortiquons les paramètres (Le carnet du détective) :
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 defind, envoie-le plutôt à l’outil suivant. »grep -i "bretagne": « Parmi les fichiers trouvés parfind, affiche-moi uniquement ceux dont le nom contient ‘bretagne' ». (L’option-ipermet d’ignorer la casse : il trouvera « Bretagne », « BRETAGNE » ou « bretagne »).
Le saviez-vous ? Il y a « date » et « date » !
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.
Pourquoi est-ce utile ?
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.
Le combo ultime : Chercher du texte dans les fichiers
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-Hlui 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 ! ».
Pourquoi utiliser le Pipe | 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 :
- La flexibilité :
grepest bien plus souple pour filtrer du texte. Vous pouvez enchaîner les filtres :| grep "2023" | grep -v "miniature". - La lisibilité : Il est souvent plus simple de construire sa recherche étape par étape. On cherche d’abord les gros fichiers, puis on « filtre » par nom.
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.
Pipe (|) 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.
1. Le Pipe (|) : Le Filtre
Le Pipe sert à transmettre du texte. C’est un tuyau.
- Le concept :
finddonne une liste de noms de fichiers, et le Pipe envoie cette liste de noms àgreppour qu’il la trie. - Quand l’utiliser : Dès que vous voulez affiner votre recherche. C’est parfait pour filtrer des mots, compter des lignes (
| wc -l), ou trier par ordre alphabétique (| sort). - En résumé : On travaille sur l’information (le nom du fichier).
2. Le Exec (-exec) : L’Action
Le paramètre -exec sert à exécuter une action réelle sur chaque fichier trouvé.
- Le concept : Pour chaque fichier qui correspond à vos critères, Linux va lancer une commande spécifique sur ce fichier.
- Quand l’utiliser : Dès que vous voulez transformer, déplacer ou supprimer.
- Exemple : « Trouve tous les fichiers
.tmpet supprime-les. » find . -name "*.tmp" -exec rm {} \;
- Exemple : « Trouve tous les fichiers
- En résumé : On travaille sur l’objet physique (le fichier lui-même).
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 ».
Vers une recherche instantanée ?
« 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.
[…] Après Grep, maîtrisez la commande Find : l’outil Linux pour ne plus jamais rien perdre. […]