lundi 25 avril 2011

La commande find ou la puissance de la recherche

find est une commande UNIX permettant de chercher des fichiers dans un ou plusieurs répertoires selon des critères définis par l'utilisateur. Par défaut, find retourne tous les fichiers contenus dans l'arborescence du répertoire courant. find permet aussi d'exécuter une action sur  chaque fichier retrouvé, ce qui en fait un outil très puissant. La commande find fait partie des commandes avancées les plus efficaces dans l’administration d’un système elle nécessite les privilèges de l’administrateur pour effectuer une recherche sur un ou plusieurs systèmes de fichiers. La commande find est un outil extrêmement puissant, doté d’une cinquantaine d’options, autorisant des recherches définies selon des critères très fins : sur fichiers, répertoires, liens symboliques... à partir du nom (en tenant compte de la casse ou non), selon le propriétaire, la taille, la date, etc, dans un unique système de fichiers ou plus ! Il faut ajouter que ses options se définissent selon deux catégories : sélection et exécution. On mesure alors toute l’étendue de la puissance de cette commande.

La preuve par l’exemple

find dispose de nombreuses options pour limiter les fichiers selon leurs caractéristiques : taille, date de modification, propriétaire, type, etc.

La syntaxe générale est :

find chemin [chemin2...] [options] [action]

Voici quelques exemples d'utilisation :

Impression de la liste des fichiers sous /home qui ont été modifiés dans les 7 derniers jours :

find /home -type f -a -mtime -7 -print

Recherche de la chaîne Wikipedia dans tous les fichiers terminés par .txt sous /home :

find /home -type f -a -name '*.txt' -exec grep -H Wikipedia {} \;
Suppression des fichiers sous /tmp de plus de 14 jours ou nommés core  :

find /tmp -type f -a \( -mtime +14 -o -name 'core' \) -exec rm {} \;

Recherche du fichier nom.txt récursivement à partir du répertoire courant et écrit le résultat dans le fichier sortie.txt situé sur le répertoire spécifié par chemin :

find . -name "nom.txt" -print > ./chemin/sortie.txt

En raison de la possibilité d'espaces dans les noms de fichiers (par exemple /tmp/ /etc/passwd), on prendra garde à des constructions telles que :
find /tmp -type f -a -mtime +14 | xargs rm

 

 




Aucun commentaire:

Enregistrer un commentaire