La commande find

Il y a maintenant plusieurs années, j’avais écrit un article sur la commande grep intitulé recherche-rapide-dans-un-fichier-linux.
J’y expliquais la puissance de la commande permettant de trouver dans un fichier une expression souhaité.

Je me rends compte que je n’ai jamais parlé de la commande « Find » que j’utilise tout autant.

Au contraire de grep, find va me permettre de trouver un fichier ou un dossier en particulier.

Syntaxe de base

Comme toujours, je commence par un man de la commande afin de récupérer la syntaxe de base

find <path> -name=<string|regex>

À partir de là, l’utilisation basique de la commande peut se faire ainsi.

find /home/christian -name "maRecherce"

Trouver un fichier ou un dossier

Là où la commande devient plus intéressante, c’est que je peux décider de lui assigner un type recherché (fichier, dossier) avec l’option « type »

Par exemple, pour chercher un fichier

find /home/christian -type f -name "monFichier"

Et pour rechercher un dossier

find /home/christian -type d -name "mon dossier"

Trouver un fichier de plus de 1Go

Jusqu’ici, je peux trouver un dossier ou un fichier.
Néanmoins, j’aimerais avoir la liste des fichiers de plus de 1Go dans un dossier.
Pour cela, rien de plus simple, je vais utiliser l’option « size »

find /home/christian -type f -size 1G

Trouver un fichier d’un utilisateur

Il est aussi possible de chercher des fichiers d’un utilisateur avec l’option « user ».

find /temp -user Daniel

En plus de l’option « user », il est aussi possible d’utiliser l’option « uid »

find /temp -uid 1008

Exécuter une commande

Désormais, imaginons que j’aimerais exécuter une commande sur un fichier recherché. Et bien cela est tout à fait possible. Il suffit de suivre cette syntaxe.

find <path> -name <string|regex> -exec <command> {} \;

Les deux crochets ‘{}’ à la fin de la commande sont des caractères de remplacement. Ils seront remplacés par les fichiers et/ou les répertoires renvoyés par la commande find. Le signe ‘\;’ à la fin termine la commande find.

Considérons par exemple, que je souhaite copier tous les fichiers pdf de mon répertoire vers un autre. Voici la commande que je vais utiliser.

find /home/christian -name="*.pdf" -type f -exec cp {} /temp/pdf \;

Conclusion

La commande find est un outil extrêmement puissant.
Je n’ai pas présenté toutes les options, je vous encourage à regarder le man de la commande.

Nous pouvons bien sûr combiner plusieurs des options présentés pour rendre cela encore plus puissant.

Par exemple, si je souhaite copier tous les fichiers png, de 2 utilisateurs.
Les fichiers doivent faire plus de 10k et avoir un nom contenant « profil ».
Voici une proposition de commande:

find . '(' -user "daniel" -o -user "christian" ')' -type f -name "*profil*.png" -size 10k -exec cp {} /tmp/ \;

Une réflexion sur « La commande find »

  1. Ping : La commande find (suite) - ChristianSueur.comChristianSueur.com

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.