Bien utiliser la commande find sous Linux
Le commande find
qui parcourt toute une arborescence de fichiers depuis un point de départ pour y trouver le(s) fichier(s) et/ou dossier(s) selon les critères que nous définissons.
Bien qu’elle ne soit pas la plus rapide, la commande find
a l’avantage de pouvoir retrouver des fichiers/dossiers qui ne seraient pas encore indexé et offre également des paramètre de recherches très avancés, y compris les expressions régulières.
Structure générale de la commande find
Voici la structure générale de la commande find:
find <point_de_départ> <critère_1> [critère_2 ...]
Les arguments sont les suivants:
point_de_départ
: le chemin à partir duquel la commande find va effectuer sa recherche.critère_x
: un critère à respecter pour la correspondance avec le fichier/dossier
Par exemple nous pouvons utiliser l’option -name
pour spécifier le nom du fichier que nous cherchons. De ce fait, si nous voulons chercher un fichier nommé passwd
dans le dossier /etc
nous utiliserions la commande suivante:
find /etc -name "passwd"
La commande nous affiche ici deux résultats mais aussi plusieurs erreurs qui sont simplement dues au fait que l’utilisateur n’a pas les droits de lecture et/ou d’exécution sur les dossiers indiqués l’empêchant donc de les parcourir.
La commande find
n’est donc pas un outil magique, elle respecte les droits et permissions des utilisateurs.
Voyons maintenant comment tirer parti de cet outil…
Utilisation de la commande find
Recherche par nom de fichier
L’utilisation la plus fréquente consiste a spécifier le nom du fichier que nous cherchons. C’est le cas du premier exemple que nosu avons vu ci-dessus.
find <point_de_départ> -name <nom>
Notez que nous pouvons aussi utiliser certains caractères spéciaux comme « jokers »:
*
: correspond à n’importe quelle série de caractères?
: correspond à n’importe quel caractère (un seul)
Ainsi nous pouvons par exemple chercher tous les fichiers dans /etc
dont l’extension est .conf
:
L’option -name
est sensible à la casse. Nous pouvons également effectuer une recherche insenseible à la casse en utilisant -iname
.
Recherche par type
Nous pouvons aussi effectuer une recherche sur base du type (dossier ou fichier) d’élément.
find <point_de_départ> -type <d|f>
Par exemple, pour trouver tous les répertoires qui se trouvent dans /etc:
Nous pouvons aussi rechercher uniquement les fichiers:
Recherche par taille
L’option -size
permet de définir des paramètres de recherche basés sur la taille des fichiers. Elle peut également être utilisée deux fois pour définir des limites supérieure et inférieure:
find <point_de_départ> -size [+|-]<taille> [-size [+|-]<taille>]
Nous pouvons donc chercher tous les fichiers dont la taille est supérieure à 20Mo:
Nous pouvons aussi chercher les fichiers dont la taille est inférieure à 100Ko:
Ou encore chercher les fichiers dont la taille est comprise entre 2Mo et 5Mo:
Recherche par date
La commande find nous permet aussi de rechercher des fichiers sur base d’une date de création, de modification ou d’accès. Les options correspondante sont les suivantes:
Option | Description |
---|---|
-atime | Recherche sur base de la date du dernier accès en nombre de jours |
-ctime | Recherche sur base de la date de création en nombre de jours |
-mtime | Recherche sur base de la date de modification en nombre de jours |
-amin | Recherche sur base de la date du dernier accès en nombre de minutes |
-cmin | Recherche sur base de la date de création en nombre de minutes |
-mmin | Recherche sur base de la date de modification en nombre de minutes |
Nous pouvons donc rechercher les fichiers modifiés il y a moins de 1 jour:
Ou encore rechercher les fichiers modifiés il y a plus de 5 jours:
En l’absence de signe + ou -, le nombre de jour ou de minute sera comparé avec exactitude.
Recherche par utilisateur
Moyennant l’option -user
nous pouvons aussi chercher les fichiers qui appartiennent à un utilisateur donné:
find <point_de_départ> -user <utilisateur>
Nous pouvons aussi effectuer une recherche par uid
avec l’option -uid
.
find <point_de_départ> -uid <id_utilisateur>
Rechercher les éléments vides
L’option -empty
nous permet de n’obtenir que les éléments vides et combinée à l’option -type
, nous pouvons donc chercher soit les dossiers vides, soit les fichiers vides.
find <point_de_départ> -empty -type <f|d>
Donc si nous voulons trouver les dossiers vides dans notre répertoire personnel…
Combiner les paramètres
Nous pouvons bien évidemment aussi combiner tous ces paramètres pour affiner notre recherche. Par exemple, nous pourrions chercher les fichiers (pas les dossiers) dont le nom commence par no dans le dossier /etc
et dont la taille est inférieure à 5ko.
sudo find /etc -name no* -type f -size -5k
Notez ici l’utilisation de sudo
permettant d’exécuter find
avec l’identité de l’utilisateur root
et donc d’avoir accès à toute l’arborescence.
Exécuter une commande
Outre le fait de pouvoir rechercher des fichiers et dossiers, la commande find nous permet aussi d’exécuter une commande sur chaque résultat de la recherche. Pour cela nous devons utiliser l’option –exec
:
find <point_de_départ> <critère_1> ... <critère_n> -exec <commande> {} \;
Ici nous avons les éléments suivants:
-exec
: l’option d’exécutioncommande
: la commande à exécuter sur le fichier/dossier{}
: l’endroit où sera inséré le chemin du fichier- un espace obligatoire
\;
: le marqueur de fin.
Pour l’illustration, voici le contenu du dossier data présent dans mon répertoire personnel. J’y ai créé une série de fichiers fictifs:
Imaginons maintenant que je veuille changer retirer les permissions d’écriture et de lecteur du groupe aux fichiers dont le nom contient 06.txt
.
find ~/data -type f -name *06.txt -exec chmod g-rw {} \;
Une fois cette commande exécutée, j’obtiens le résultat suivant:
Conclusion
La commande find
nous permet sans trop d’effort de rechercher efficacement et précisément des fichiers ou dossiers sur base d’une série de critères. Le temps d’exécution peut parfois être long de par le fonctionnement récursif de cette commande, mais en contrepartie elle nous permet de retrouver des fichiers qui ne sont pas indexés.
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.