====== **Utilisation de la commande find** ======
La commande ''find'' permet de chercher des fichiers, et eventuellement d'éxecuter une action dessus. Par exemple :
>
find . -print | less
affiche la liste de tous les fichiers du répertoire courant (l'option -print est normalement incluse par défaut). On peut rediriger les messages d'erreur vers le ``trou noir%%''%% (le périphérique ''/dev/null'') :
>
find . -print 2> /dev/null | less
ou les inclures (on rassemble alors en un seul canal la sortie standard et le sortie d'erreur standard) :
>
find . -print 2>&1 liste | less
Les options de la commande ''find'' sont nombreuses. Le tableau en donne un apercu.
\\
^ **Option** ^ **Signification** ^
| **-name** | Recherche par **nom** de fichier. |
| **-type** | Recherche par **type** de fichier. |
| **-user** | Recherche par **propriétaire**. |
| **-group** | Recherche par appartenance à un **groupe**. |
| **-size** | Recherche par **taille** de fichier. |
| **-atime** | Recherche par date de **dernier accès**. |
| **-mtime** | Recherche par date de **dernière modification**. |
| **-ctime** | Recherche par date de **création**. |
| **-perm** | Recherche par **autorisations d'accès**. |
| **-links** | Recherche par **nombre de liens** au fichier. |
\\ Pour les options -size, -atime, -mtime, -ctime et -links, il faut spécifier une valeur, précédée par le signe ``**+**%%''%% pour ``supérieur à%%''%%, ``**-**%%''%% pour ``inférieur à%%''%%, ou rien pour ``égal à%%''%%. Par exemple :
>
find . -mtime -3 -print
affiche les fichiers dont les dernières modifications remontent à moins de **3** jours (donc tous les fichiers modifiés entre aujourd'hui et il y a trois jours seront affichés). De même, +5 afficherait les fichiers dont les dernières modifications remontent à plus de **5** jours.
Voici d'autres exemples d'utilisation de la commande ''find'' :
* * Pour afficher tous les fichiers se terminant par ``**.c**%%''%% : find . -name ".c" -print
* Pour afficher tous les répertoires dont le nom se termine par ``**s**%%''%% : find . -type d -name "*s" -print
Pour afficher tous les fichiers, on aurait utilisé le code f.\\
* Pour afficher tous les fichiers ayant une taille de 10 blocs : find . -size 10 -print
ce qui est équivalent à demander la liste des fichiers ayant une taille de 5120 caractères : find . -size 5210c -print
On aurait pu aussi demander la liste des fichiers ayant une taille **supérieure** (+200k) ou **inférieure** (-200k) à 200 Ko.\\
* Pour afficher tous les fichiers ayant une certaine permission exprimée en octale : find . -perm 755 -print
ou ayant **au minimum** les droits d'écriture pour le groupe : find . -perm -020 -print
* Pour éxecuter la commande ''ls -l'' pour chaque fichier trouvé : find . -type f -exec ls -l {} \;
et pour demander confirmation avant chaque action : find . -type f -ok -exec rm {} \;
Toute autre commande peut être éxecutée avec l'option -exec.
* Pour associer plusieurs critères avec -a pour **et**, -o pour **ou**, ! pour **négation**. Par exemple : find . ! -user root -print
affiche tous les fichiers n'appartenant à **root**, et find . \( -name %%'*%%.tex' -o -name %%'*%%.dvi' \) -print
affiche tous les fichiers se terminant par ``**.tex**%%''%% ou ``**.dvi**%%''%%.