Trouver des fichiers avec une extension dans un dossier avec find

Lorsque l’on utilise les serveurs Linux, s’il y a bien quelque chose que l’on fait souvent, c’est chercher des fichiers. Que ce soit pour dépanner, chercher un fichier de configuration, chercher un type de fichier en particulier. C’est ce que nous allons voir ici. D’ailleurs, je vous avais déjà fait un tutoriel pour retrouver les lignes de commandes tapées dans le terminal et qui sont dans l’historique. C’est là aussi une chose très pratique, voir indispensable pour tout administrateur qui passe sa vie dans le terminal !

Aujourd’hui, nous allons voir comment utiliser la très puissante commande find pour localiser et trouver des fichiers qui comportent une extension en particulier. Vous voulez retrouver l’ensemble des fichiers de type .pdf dans un dossier avec des milliers de fichiers divers ? Pas de problème find est là pour vous ? Peut-être que votre recherche se concentre plutôt sur les images ? Ce n’est pas un souci non plus. Avec find on va pouvoir trouver en une commande toutes les images d’un dossier qui auraient les extensions .jpg .jpeg .png .gif !

Comment trouver les fichiers avec find en ciblant une extension ?

Pour rechercher des fichiers avec une extension ou un groupe d’extension, nous allons comme mentionné précédemment, utiliser find. Ce que j’aime avec cette commande, c’est que c’est très bien optimisé. Je l’ai déjà utilisé sur des petits serveurs qui avaient énormément de données, mais peu de puissance CPU disponible, et ça fonctionnait malgré tout sans le moins problème. C’était juste un peu plus lent. En-tout-cas, j’ai jamais eu de crash même en l’utilisant pour chercher des fichiers au milieu de milliers d’autres !

Voici un exemple pour utiliser la commande find et chercher les images .jpg ou .png dans un dossier :

find /chemin/vers/le/dossier -type f \( -iname "*.jpg" -o -iname "*.png" \) -print

Quelques explications pour comprendre ce qu’il se passe :

  • find est la commande pour chercher des fichiers dans le système de fichiers Linux (ça fonctionne aussi sur macOS).
  • /chemin/vers/le/dossier est le chemin vers le dossier dans lequel vous voulez rechercher les fichiers en partant de la racine du système de fichier.
  • -type f spécifie que vous ne voulez que des fichiers, pas des répertoires ou d’autres types de fichiers.
  • -name spécifie le nom du fichier recherché. Dans notre cas j’ai préféré mettre -iname qui signifie case insensitive, c’est-à-dire que la recherche ne tiendra pas compte de la casse des lettres.
  • .jpg et .png sont des expressions régulières pour les fichiers avec les extensions .jpg et .png.
  • -o signifie tout simplement  » ou « .
  • -print affiche le chemin des fichiers trouvés.

Maintenant, si on veut chercher quasiment tous les types d’images possibles dans un dossier, on peut donc augmenter la taille de l’expression régulière pour ratisser large. Il suffit d’ajouter des conditions avec des -o comme dans cet exemple : 

find /chemin/vers/le/dossier -type f \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.jpeg" -o -iname "*.gif" \) -print

Si vous voulez seulement chercher les .pdf vous pouvez réduire la taille de l’expression régulière pour ne cibler qu’un seul type de fichier :

find /chemin/vers/le/dossier -type f -iname "*.pdf" -print -r

Maintenant on veut chercher tous les fichiers qui sont théoriquement de type texte :

find /chemin/vers/le/dossier -type f \( -iname "*.txt" -o -iname "*.md" -o -iname "*.html" -o -iname "*.xml" -o -iname "*.json" \) -print

Enfin, si on est méfiant, on peut aussi chercher tout ce qui n’a normalement pas sa place dans son serveur Linux après avoir récupéré une archive par exemple. Bien sur cette liste n’est pas exhaustive et ces fichiers ne sont pas forcément dangereux, mais c’est pour vous montrer les possibilités. Vous pouvez ainsi vous compiler votre petite liste personnelle de fichier à chercher. Encore une fois pas de changement hormis les extensions : 

find /chemin/vers/le/dossier -type f \( -iname "*.exe" -o -iname "*.dll" -o -iname "*.vbs" -o -iname "*.bat" -o -iname "*.cmd" -o -iname "*.ps1" -o -iname "*.jar" -o -iname "*.pl"  \) -print

Attention, selon l’endroit ou vous aller chercher, avec la récursivité il est possible que essayer de parcourir des dossiers et donc des fichiers avec des droits insuffisants. Dans ce cas, vous verrez des erreurs explicites et il faudra lancer find avec les bons droits ou en root. Voilà, vous savez maintenant rechercher facilement un type de fichier sur votre serveur Linux avec une simple commande FIND ! N’hésitez pas à en abuser, car c’est vraiment très pratique !

Laisser un commentaire