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/ \;
Ping : La commande find (suite) - ChristianSueur.comChristianSueur.com