La commande find
<p><p><p><p>Configuration des serveurs NT – TSE sur site</p></p></p></p>
1. Nom
find - Rechercher des fichiers dans une hiérarchie de répertoires.
2. description
find parcourt les arborescences de répertoires commençant en chacun des chemins mentionnés, en évaluant les expressions fournies pour chaque fichier rencontré.
3. Expressions
L'expression est constituée
d'options (affectant l'ensemble des opérations plutôt
que le traitement d'un fichier particulier, et renvoyant toujours
vrai), de tests (renvoyant une valeur vraie ou fausse), et
d'actions (ayant des effets de bords et renvoyant une valeur
vraie ou fausse), tous ces éléments étant
séparés par des opérateurs.
Quand un opérateur est manquant, l'opération par défaut -and est appliquée. Si l'expression ne contient pas d'action autre que -prune, find applique l'action -print par défaut sur tous les fichiers pour lesquels l'expression est vraie.
4. Options
L'expression est constituée
d'options (affectant l'ensemble des opérations plutôt
que le traitement d'un fichier particulier, et renvoyant toujours
vrai), de tests (renvoyant une valeur vraie ou fausse), et
d'actions (ayant des effets de bords et renvoyant une valeur
vraie ou fausse), tous ces éléments étant
séparés par des opérateurs.
Les options principales du find :
-xdev : ne pas parcourir les répertoires situés sur d'autres systèmes de fichiers. Cette option est très intéressante pour rechercher sur un file system.
5. Tests
Les arguments numériques peuvent
être indiqués comme suit:
+n : supérieur à n,
-n : inférieur à n,
n : égal à n.
-atime n : dernier accès au fichier exactement n jours auparavant. Exemple : -atime -2 Ayant subi un accès depuis avant-hier
-ctime n : derniere modification du statut du fichier il y a n*24 heures.
-mtime n : fichier modifié exactement n jours auparavant. Exemple : -mtime +7 Inchangés depuis 7 jours au moins
-name motif : Fichier dont le nom de base (sans les répertoires du chemin d'accès), correspond au motif du shell. Les méta-caractères (`*', `?', et `[]') ne sont jamais mis en correspondance avec un point `.' au début du nom. Pour ignorer un répertoire, ainsi que tous ses sous-répertoires, utiliser l'option -prune; vous trouverez un exemple dans la description de l'option -path.
-perm mode : Fichier dont les autorisations d'accès sont fixées exactement au mode indiqué (en notation symbolique ou octale). La notation symbolique utilise le mode 0 comme point de départ.
-perm -mode : Fichier ayant au moins toutes les autorisations indiquées dans le mode.
-perm +mode : Fichier ayant certaines des autorisations indiquées dans le mode.
-size n[bckw] : Fichier utilisant n unités d'espace. Les unités sont des blocs de 512 octets par défaut (ou si un suffixe `b' suit le nombre n), des octets si un suffixe `c' suit n, des kilo-octets si un suffixe `k' est utilisé, ou des mots de 2 octets si un `w' suit le nombre n. La taille ne prend pas en compte les blocs indirects, mais elle comptabilise les blocs des fichiers éparpillés pas encore alloués. Exemple : -size +100 De taille supérieur à 50K ( +1000 > 500ko +2000 > 1MO)
-type c
Fichier du type c:
b : fichier spécial en mode bloc (avec buffer)
c : fichier spécial en mode caractère (sans buffer)
d : répertoire
p : tube nommé (FIFO)
f : fichier régulier
l : liens symbolique
s : socket
-user utilisateur : fichier appartenant à l'utilisateur indiqué (UID numérique éventuellement)
6. Actions
-exec commande ; :
Exécute la commande; vrai si le code de retour 0 est
renvoyé. Tous les arguments suivants de find sont
considérés comme des arguments pour la ligne de
commande, jusqu'à ce qu'on rencontre un `;'. La chaîne
`{}' est remplacée par le nom du fichier en cours de
traitement, et ceci dans toutes ses occurences, pas seulement aux
endroits où elle est isolée, comme c'est le cas avec
d'autres versions de find. Ces deux chaînes peuvent
avoir besoin d'être protégées du développement
de la ligne de commande par le shell, en utilisant le caractère
d'échappement (`\') ou une protection par des apostrophes. La
commande est exécutée depuis le répertoire de
départ.
-ok commande ; : comme -exec mais interroge d'abord l'utilisateur (en utilisant l'entrée standard). Si la réponse ne commence pas par `y' ou `Y', la commande n'est pas exécutée, et le test devient faux.
7. exemples
Tout ces exemples ont été réalisés sur un serveur AIX et non linux ...
#df -k
Syst. fichiers Blocs 1024 Libre %Util Iutil %Iutil Monté sur
/dev/hd4 24576 9276 63% 1455 24% /
/dev/hd2 303104 63716 79% 11370 16% /usr
/dev/hd9var 176128 164312 7% 289 1% /var
/dev/hd3 16384 15748 4% 40 1% /tmp
/dev/hd1 24576 23408 5% 87 2% /home
/dev/lv07 16384 3668 78% 497 13% /outil
Soit le répertoire /tmp avec les fichiers suivants :
#ls -ltr
total 56
drwx------ 2 root system 512 19 fév 1997 lost+found
drwxrwxr-x 8 root system 512 23 fév 1997 bos
drwxr-xr-x 2 root system 512 24 fév 1997 etc
drwxr-xr-x 3 root system 512 09 mar 1999 vgdata
drwxr-xr-x 2 root system 512 25 oct 2000 chcormer
-rw-r--r-- 1 root system 0 02 nov 14:31 titi
-rw-r--r-- 1 root system 0 02 nov 14:54 tata
-rw-r--r-- 1 root system 6851 02 nov 16:18 toto
exercice 1 : rechercher tous les fichiers dans le file system /tmp seulement ayant été modifiés il y a moins de 24 heures
#find /tmp -xdev -mtime -1 -type f
/tmp/titi
/tmp/toto
/tmp/tata
exercice 2 : rechercher les fichiers toto ou titi sur le file system /tmp
#find /tmp -xdev \( -name toto -o -name titi \)
/tmp/titi
/tmp/toto
exercice 3 : faire une suppression de fichier avec demande de confirmation avec l'option exec et ok
Nous voulons supprimer tous les fichiers dont le nom commence par toto et qui sont situés sous /tmp.
#find /tmp -xdev -name "toto*" -type f -exec rm -i {} \;
rm: Voulez-vous supprimer /tmp/toto? O
Autre syntaxe possible avec l'option -ok :
#find /tmp -xdev -name "toto*" -type f -ok rm {} \;
exercice 4 : rechercher les fichiers modifiés depuis 24 heures avec l'option mtime , les visualiser puis les supprimer après confirmation
#find /tmp -xdev -mtime -1 -type f -exec ls -l {} \; -exec rm -i {} \;
-rw-r--r-- 1 root system 0 02 nov 14:31 /tmp/titi
rm: Voulez-vous supprimer /tmp/titi? o
-rw-r--r-- 1 root system 6851 02 nov 16:18 /tmp/toto
rm: Voulez-vous supprimer /tmp/toto? o
-rw-r--r-- 1 root system 0 02 nov 14:54 /tmp/tata
rm: Voulez-vous supprimer /tmp/tata? o
exercice 5 : rechercher un fichier de plus de 1 MO via l'option size
#find /tmp -xdev -size +2000 -type f -exec ls -l {} \;
-rw-r--r-- 1 root system 1091846 02 nov 17:37 /tmp/toto
exercice 6 : rechercher tous les fichiers sous un fs en excluant les fichiers log, core et dmp
#find /logiciels/RIF-AB/re7100 -type f ! \( -name "*.log" -o -name "core" -o -name "*.dmp" \) -exec ls {} \;