Informations :
Dates
- Publish : : 2010
- Modification : Thursday 08 september 2011
- 1687 views
Share :
La syntaxe est la suivante :
Script avec 1 ligne
001find
Les critères de recherche sont les suivants :
-
-name
recherche sur le nom du fichier, -
-perm
recherche sur les droits d'accès du fichier, -
-links
recherche sur le nombre de liens du fichier, -
-user
recherche sur le propriétaire du fichier, -
-group
recherche sur le groupe auquel appartient le fichier, -
-type
recherche sur le type (d
=répertoire,c
=caractère,f
=fichier normal), -
-size
recherche sur la taille du fichier en nombre de blocs (1 bloc=512octets), -
-atime
recherche par date de dernier accès en lecture du fichier, -
-mtime
recherche par date de dernière modification du fichier, -
-ctime
recherche par date de création du fichier.
On peut combiner les critères avec des opérateurs logiques :
critère1 critère2 ou critère1 -a critère2
correspond au et logique,!critère
non logique,(critère1 -o critère2)
ou logique,
La commande find
doit être utilisé avec l'option -print
. Sans l'utilisation de cette option, même en cas de réussite dans la recherche, find
n'affiche rien à la sortie standard (l'écran, plus précisément le shell).
La commande find
est récursive, c'est à dire où que vous tapiez, il va aller scruter dans les répertoires, et les sous répertoires qu'il contient, et ainsi de suite.
Recherche par nom de fichier
Pour chercher un fichier dont le nom contient la chaîne de caractères toto
à partir du répertoire /usr
, vous devez tapez :
Script avec 1 ligne
001find /usr -name toto -print
Pour rechercher tous les fichiers se terminant par .c
dans le répertoire /usr
, vous taperez :
Script avec 1 ligne
001find /usr -name "*.c" -print
Recherche suivant la date de dernière modification
Pour connaître les derniers fichiers modifiés dans les 2 derniers jours dans toute l'arborescence (/
), vous devez taper :
Script avec 1 ligne
001find / -mtime 2 -print
Recherche suivant la taille
Pour connaître dans toute l'arborescence, les fichiers dont la taille dépasse 1Mo (2000 blocs de 512Ko), vous devez taper :
Script avec 3 lignes
001find / -size 2000 -print
002# ici file + 100mg
003find / -size +100000k -exec ls -lh {} ; | awk '{ print $9 ":" $5 }' 1> /tmp/large-files.log | cat /tmp/large-files.log
Recherche combinée
Vous pouvez chercher dans toute l'arborescence (/
), les fichiers ordinaires (-f
) appartenant de l'utilsateur ksso0s
, dont la permission est fixée à 755
, on obtient :
Script avec 1 ligne
001find / -type f -user ksso0s -perm 755 -print
Si vous voulez connaître les fichiers n'appartenant pas à l'utilisateur ksso0s
, vous taperez :
Script avec 1 ligne
001find . ! -user ksso0s -print
! -user ksso0s
, est la négation de -user ksso0s
, c'est à dire, tous les utilisateurs sauf ksso0s
. Recherche des fichiers qui ont pour nom a.out
et des fichiers se terminant par .c
. On tape :
Script avec 1 ligne
001find . ( -name a.out -o -name "*.c" ) -print
On recherche donc les fichiers dont le nom est a.out
ou les fichiers se terminant par *.c
, une condition ou l'autre. Recherche des fichiers qui obéissent à la fois à la condition a pour nom core et à la condition a une taille supérieure à 1Mo.
Script avec 1 ligne
001find . (-name core -a size +2000 ) -print
Les commandes en option
L'option -print
est une commande que l'on passe à find
pour afficher les résultats à la sortie standard. En dehors de print, on dispose de l'option -exec
. find
couplé avec exec
permet d'exécuter une commande sur les fichiers trouvés d'après les critères de recherche fixés. Cette option attend comme argument une commande, celle ci doit être suivi de {}
; Exemple recherche des fichiers ayant pour nom core, suivi de l'effacement de ces fichiers.
Script avec 1 ligne
001find . -name core -exec rm {} ;
Tous les fichiers ayant pour nom core
seront détruits, pour avoir une demande de confirmation avant l'exécution de rm
, vous pouvez remplacer -exec
par -ok
:
Script avec 1 ligne
001find . -name core -ok rm {} ;
Autres subtilités
Une fonction intéressante de find
est de pouvoir être utilisé avec d'autres commandes UNIX. Par exemple:
Script avec 1 ligne
001find . -type f -print | xargs grep toto
En tapant cette commande vous allez rechercher dans le répertoire courant tous les fichiers normaux (sans les répertoires, fichiers spéciaux), et rechercher dans ces fichiers tous ceux contenant la chaîne toto.