Provided by:
manpages-fr-extra_20101103_all 
NOM
find - Rechercher des fichiers dans une hierarchie de repertoires
SYNOPSIS
find [-H] [-L] [-P] [-D option-debogage] [-Oniveau] [chemin...]
[expression]
DESCRIPTION
Cette page de manuel documente la version GNU de find. GNU find
parcourt les arborescences des repertoires de chacun des chemins
mentionnes, en evaluant les expressions fournies pour chaque fichier
rencontre. L'evaluation de l'expression se fait de gauche a droite, en
suivant les regles de priorite decrites dans la section OPERATEURS,
jusqu'a l'obtention du resultat (par exemple la partie gauche est
fausse pour un operateur et, vraie pour un operateur ou), puis find
passe au nom de fichier suivant.
Si vous utilisez find dans un environnement dans lequel la securite est
importante (si vous l'utilisez par exemple pour faire des recherches
dans des repertoires qui sont accessibles en ecriture a d'autres
utilisateurs), vous devriez lire le chapitre << Security
Considerations >> de la documentation de findutils. Cette
documentation, fournie par findutils, s'appelle Finding Files (en
anglais). Elle contient bien plus de details et d'explications que
cette page de manuel, et peut donc etre consideree comme une source
d'informations plus utile.
OPTIONS
Les options -H, -L et -P controlent le traitement des liens
symboliques. Les parametres de la ligne de commande qui les suivent
sont consideres comme des fichiers ou des repertoires a examiner, et ce
jusqu'au premier parametre qui commence par << - >>, << ( >> ou
<< ! >>. Ce parametre, et tous ceux qui suivent, sont consideres comme
decrivant ce qui doit etre recherche. Si aucun chemin n'est precise,
c'est le repertoire courant qui est utilise. Si aucune expression n'est
donnee, c'est l'ordre -print qui est utilise (quoi qu'il en soit, vous
devriez plutot utiliser -print0).
Cette page de manuel decrit les << options >> contenues dans la liste
d'expressions. Ces options controlent le comportement de find mais sont
indiquees immediatement apres le dernier chemin. Les cinq options
<< reelles >> -H, -L, -P, -D et -O doivent etre saisies avant le
premier chemin, le cas echeant. Un double tiret -- pourra etre utilise
afin d'indiquer que les arguments restants ne sont pas des options
(sachant qu'il est en general plus sur de faire commencer les chemins
de recherche par << ./ >> ou << / >> lorsque vous utilisez des
jokers).
-P Ne jamais suivre les liens symboliques, ce qui est le
comportement par defaut. Quand find analyse ou affiche les
informations concernant un fichier, et que ce fichier est un
lien symbolique, les informations utilisees sont celles qui
concernent le lien symbolique lui-meme (et non le fichier
pointe).
-L Suivre les liens symboliques. Quand find analyse ou affiche les
informations concernant un fichier, ce sont celles extraites des
caracteristiques du fichier vers lequel mene les liens, et non
celle du lien lui-meme (sauf s'il s'agit d'un lien casse, ou si
find est incapable d'analyser le fichier vers lequel pointe le
lien). L'utilisation de cette option implique -noleaf qui sera
toujours active pour les utilisations ulterieures de l'option
-P. Si l'option -L est active et que find decouvre un lien
symbolique vers un sous-repertoire lors de ses recherches, le
sous-repertoire pointe par le lien symbolique sera examine.
Quand l'option -L est active, le predicat -type correspondra
toujours au type du fichier pointe par le lien symbolique plutot
que celui du lien lui-meme (sauf si le lien symbolique est
casse). Les predicats -lname et -ilname renvoient toujours faux
lors de l'utilisation de -L.
-H Ne pas suivre les liens symboliques, sauf pour le traitement des
parametres de la ligne de commande. Quand find analyse ou
affiche les informations concernant un fichier, celles qui sont
utilisees viennent des proprietes du lien symbolique lui meme
(et non du fichier pointe). La seule exception a ce comportement
est lorsqu'un fichier indique sur la ligne de commande est
lui-meme un lien symbolique, et que ce lien peut etre resolu.
Dans ce cas, les informations traitees sont celles du fichier
pointe par le lien (autrement dit, le lien est suivi). Les
informations concernant le lien lui-meme sont utilisees en
dernier recours, si le fichier pointe par le lien symbolique ne
peut etre analyse. Si l'option -H est active, et que l'un des
liens indiques sur la ligne de commande est un lien symbolique
pointant vers un repertoire, le contenu de ce repertoire sera
analyse (sachant bien sur que l'option -maxdepth 0 l'en
empecherait).
Si plus d'une option parmi -H, -L ou -P est indiquee, chacune ecrase
les precedentes, et c'est la derniere qui apparait sur la ligne de
commande qui prime sur les autres. Puisque c'est l'option par defaut,
on considere que c'est -P qui est active, a moins que -H ou -L ne
soient utilisees.
La version find du GNU evalue souvent des fichiers pendant l'analyse de
la ligne de commande, et ce avant qu'une recherche n'ait commencee. Ces
options modifient aussi la facon dont les parametres sont traites. Plus
precisement, il existe un certain nombre de tests qui comparent les
fichiers listes sur la ligne de commande et le fichier en cours
d'analyse. Dans tous les cas de figure, un fichier de la ligne de
commande a ete analyse et certaines de ses caracteristiques ont ete
memorisees. Si le fichier indique est en fait un lien symbolique, et
que l'option -P est active (ou que ni -H ni -L n'ont ete precisees),
alors l'information qui sera utilisee pour les comparaisons sera
extraite des proprietes du lien symbolique. Sinon, elle sera extraite
des proprietes du fichier pointe par le lien. Si find ne peut suivre le
lien (soit parce ce qu'il ne dispose pas des privileges suffisants,
soit parce que le lien pointe vers un fichier inexistant), alors ce
sont les proprietes du lien lui-meme qui seront utilisees.
Quand les options -H ou -L sont actives, tout lien symbolique donne
comme parametre a -newer sera dereference, et le timestamp utilise sera
celui du fichier pointe par le lien symbolique. Ceci s'applique de la
meme facon a -newerXY, -anewer et -cnewer.
L'option -follow a le meme effet que -L, sauf qu'elle agit a l'endroit
ou elle apparait (c'est a dire que si -L n'est pas utilisee et que
-follow l'est, tout lien symbolique qui apparait sur la ligne de
commande apres -follow sera dereference, et ceux apparaissant avant ne
le seront pas).
-D options-debogage
Afficher des informations de diagnostic, ce qui peut etre
pratique pour analyser pourquoi find ne fait pas ce que vous lui
demandez. La liste des options de debogage devra utiliser des
virgules comme separateurs. La compatibilite des options de
debogage n'est pas garantie au fil des versions de findutils. La
sortie de find -D help permet d'obtenir la liste complete des
options reconnues. Les options de debogage valides comportent
help Decrire les options de debogage.
tree Afficher l'arbre de l'expression dans sa forme d'origine
et sa forme optimisee.
stat Afficher des messages des que des fichiers sont examines
via les appels systemes stat et lstat. Le programme find
tente de limiter ce type d'appels.
opt Afficher des informations de diagnostic liees a
l'optimisation de l'arbre de l'expression (voir l'option
-O).
rates Afficher un resume indiquant le nombre de succes ou
d'echecs de chacun des predicats.
-Oniveau
Activer l'optimisation des requetes. Le programme find
reorganise l'ordre des tests afin d'en accelerer l'execution
tout en preservant le resultat exact, c'est-a-dire en evitant de
modifier ceux qui ont des effets de bords. Les optimisations
realisees a chacun des niveaux sont les suivantes.
0 Equivalent au niveau 1 d'optimisation.
1 Niveau d'optimisation par defaut. Il correspond au
comportement habituel. Les expressions sont reorganisees
afin que les tests bases seulement sur les noms (comme
-name ou -regex par exemple) soient executes en premier.
2 Tous les tests -type ou -xtype sont executes apres ceux
bases uniquement sur le nom des fichiers, mais avant tous
les tests qui traitent d'informations stockees dans
l'inode. Sur les versions modernes d'Unix, les types de
fichiers sont recuperes par readdir(), et sont donc plus
rapides a evaluer que ceux qui necessitent de travailler
d'abord sur le fichier.
3 Dans ce niveau d'optimisation, l'optimiseur de requetes
base sur le cout total est active. L'ordre des tests est
modifie afin que les tests les moins couteux
(c'est-a-dire les plus rapides) soient executes en
premier, et les plus couteux executes plus tard, si
besoin est. A l'interieur d'un meme niveau de cout, les
predicats sont evalues plus ou moins tot selon leur
probabilite de succes. Avec l'operateur -o, les predicats
qui sont susceptibles de reussir sont evalues plus tot,
et avec l'operateur -a, ce sont ceux qui risquent
d'echouer qui sont evalues plus tot.
L'optimiseur base sur le cout a une idee precise des chances de
succes de n'importe quel test. Dans certains cas, cette
probabilite prend en compte la nature specifique du test (par
exemple, l'estimation de succes d'un -type f est superieure a
celle d'un -type c). L'optimiseur base sur le cout est
actuellement en cours d'evaluation. S'il n'ameliore pas les
performances de find, il sera de nouveau retire. Reciproquement,
les optimisations qui s'averent fiables, robustes et efficaces
pourront dans l'avenir etre activees a des niveaux
d'optimisations moindres. Toutefois, le comportement par defaut
(c'est a dire le niveau d'optimisation 1) ne sera pas modifie
dans les differentes versions de la serie 4.3.x. La suite de
tests unitaires de findutils est executee sur chacun des niveaux
d'optimisation de find afin de s'assurer que le resultat est
constant.
EXPRESSIONS
L'expression est constituee d'options (affectant l'ensemble des
operations plutot 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 elements etant separes par des
operateurs. Quand un operateur est manquant, l'operation par defaut
-and est appliquee.
Si l'expression ne contient pas d'action autre que -prune, find
applique l'action -print par defaut a tous les fichiers pour lesquels
l'expression est vraie.
OPTIONS
Toutes les options renvoient toujours la valeur vraie. Excepte pour
-daystart, -follow et -regextype, elles ont toujours un effet global,
meme sur les tests indiques avant l'option. En effet, les options sont
traitees au moment ou la ligne de commande est analysee, tandis que les
tests ne font rien avant que les fichiers ne soient examines. Les
options -daystart, -follow et -regextype sont differentes a cet egard,
et ne s'appliqueront que sur les tests qui apparaissent plus tard sur
la ligne de commande. De ce fait, pour ameliorer la lisibilite, il est
preferable de les placer au debut de l'expression. Vous recevrez un
avertissement dans les autres cas.
-d Un synonyme de -depth, dans un but de compatibilite avec
FreeBSD, NetBSD, MacOS X et OpenBSD.
-daystart
Mesurer les temps (avec -amin, -atime, -cmin, -ctime, -mmin, et
-mtime) depuis le debut de la journee plutot que depuis 24
heures. Cette option n'affecte que les tests qui sont indiques
plus loin sur la ligne de commande.
-depth Traiter d'abord les sous-repertoires avant le repertoire
lui-meme. L'action delete implique aussi -depth.
-follow
Obsolete, utilisez plutot l'option -L a la place. Dereference
les liens symboliques. Ceci implique l'option -noleaf. L'option
-follow n'affecte que les tests qui apparaissent apres son
apparition sur la ligne de commande. Sauf dans le cas ou
l'option -H ou -L est indiquee, la position de l'option -follow
change le comportement du predicat -newer, et tout fichier donne
en parametre de -newer sera dereference s'il s'agit d'un lien
symbolique. La meme remarque s'applique a -newerXY, -anewer et
-cnewer. De la meme facon, le predicat -type correspondra
toujours au type du fichier pointe par le lien symbolique plutot
que le type du lien lui-meme. Les predicats -lname et -ilname
renvoient toujours faux lorsqu'on utilise -follow.
-help, --help
Afficher un message d'aide concernant l'utilisation de find sur
la sortie standard et quitter.
-ignore_readdir_race
Normalement, find affiche un message d'erreur quand il echoue
lors de l'analyse d'un fichier. Si vous utilisez cette option et
que le fichier est efface entre le moment ou find lit le nom du
fichier dans le repertoire et celui ou il essaye de l'analyser,
vous n'obtiendrez aucun message d'erreur. Cela s'applique aussi
aux fichiers et repertoires dont vous avez donne les noms sur la
ligne de commande. Cette option prend effet des le moment ou la
ligne de commande est lue, ce qui veut dire que vous ne pouvez
pas rechercher sur une partie du systeme de fichiers avec cette
option activee, et sur une autre partie avec cette option
desactivee (si vous devez faire cela, vous utiliserez plutot
deux commandes find, une avec l'option et l'autre sans).
-maxdepth n
Descendre au plus a n niveaux de profondeur des repertoires (n
etant un entier positif ou nul), dans les parametres fournis sur
la ligne de commande. -maxdepth 0 signifie que les tests et les
actions ne s'appliquent qu'aux parametres de la ligne de
commande.
-mindepth n
Ne pas appliquer les tests ou les actions a des niveaux de
profondeur inferieurs a n. n est un entier positif ou nul.
-mindepth 1 signifie que les tests et les actions s'appliquent a
tous les fichiers sauf aux parametres de la ligne de commande.
-mount Ne pas parcourir les repertoires situes sur d'autres systemes de
fichiers. Il s'agit d'une alternative a l'option -xdev, assurant
la compatibilite avec d'anciennes versions de find.
-noignore_readdir_race
Desactiver l'effet de -ignore_readdir_race.
-noleaf
Ne pas optimiser, en ignorant que les repertoires sont supposes
contenir deux sous-repertoires de moins que leur nombre de liens
physiques. Cette option est necessaire lorsque l'on parcourt des
systemes de fichiers ne suivant pas les conventions Unix
concernant les liens de repertoires, comme les systemes MS-DOS,
les CD-ROM ou les points de montage de volumes AFS. Chaque
repertoire sur un systeme de fichiers Unix dispose d'au moins
deux liens physiques, son nom et << . >>. De plus, chaque
sous-repertoire a egalement un lien << .. >> vers le repertoire
parent (s'il existe). Quand find examine un repertoire, il sait
qu'il y a deux sous-repertoires de moins que de liens vers le
repertoire. Une fois qu'il a rencontre le nombre prevu de
sous-repertoires, il est donc sur que le reste des entrees est
constitue de fichiers autres que des sous-repertoires. Ces
fichiers sont des feuilles ([NDT] << leaf >>) dans
l'arborescence des repertoires. S'il n'y a que les noms de
fichiers a examiner, il n'a plus besoin de verifier leur nature,
ce qui entraine une augmentation notable de la vitesse de
traitement.
-regextype type
Definir la syntaxe des expressions rationnelles des tests -regex
et -iregex qui seront indiques plus loin sur la ligne de
commande. Les types actuellement implementes sont emacs (type
par defaut), posix-awk, posix-basic, posix-egrep et
posix-extended.
-version, --version
Afficher le numero de version de find et quitter.
-warn, -nowarn
Activer ou desactiver les messages d'avertissement. Ces messages
d'avertissement concernent l'usage de la ligne de commande, et
non les evenements que find peut rencontrer lorsqu'il explore
les repertoires. Le comportement par defaut est d'activer -warn
si l'entree standard est un tty, et -nowarn dans les autres cas.
-xdev Ne pas parcourir les repertoires situes sur d'autres systemes de
fichiers.
TESTS
Quelques tests (comme -newerXYet -samefile par exemple) permettent de
comparer le fichier en cours d'examen et un fichier de reference
indique sur la ligne de commande. Quand ces tests sont utilises,
l'analyse du fichier de reference est soumis aux effets des options -H,
-L , -P et tout -follow precedent. Par contre, ce fichier de reference
n'est consulte qu'une fois, au moment ou la ligne de commande est
interpretee. Si ce fichier de reference ne peut pas etre analyse (par
exemple si l'appel systeme stat(2) echoue), un message d'erreur sera
genere, et la commande find s'interrompra avec un statut different de
zero.
Les parametres numeriques peuvent etre indiques comme suit :
+n superieur a n,
-n inferieur a n,
n strictement egal a n.
-amin n
Dernier acces au fichier il y a n minutes.
-anewer fichier
Dernier acces au fichier plus recent que la derniere
modification de fichier. Si le fichier est un lien symbolique et
que les options -H ou -L sont actives, c'est toujours la date de
dernier acces du fichier pointe qui est utilisee.
-atime n
Dernier acces au fichier il y a n*24 heures. Lorsque find
calcule le nombre de periodes de 24 heures depuis lequel le
fichier a ete accede, la partie fractionnelle est ignoree.
Ainsi, pour correspondre a -atime +1, un fichier doit avoir ete
accede il y a au moins deux jours.
-cmin n
Date de derniere modification du statut du fichier il y a n
minutes.
-cnewer fichier
Date de derniere modification du statut du fichier plus recente
que la date de derniere modification du fichier donne. Si le
fichier donne est un lien symbolique et que les options -H ou -L
sont actives, alors c'est la date de derniere modification du
statut du fichier pointe par le lien qui est consideree.
-ctime n
Date de derniere modification du statut du fichier il y a n*24
heures. Consultez l'explication concernant -atime pour
comprendre comment les effets d'arrondis alterent
l'interpretation de la date de derniere modification du statut
du fichier.
-empty Fichier vide. De plus, ce fichier doit etre regulier ou etre un
repertoire.
-executable
Correspond aux fichiers qui sont executables et aux repertoires
qui sont accessibles (en ce qui concerne la resolution d'un nom
de fichier). Les listes de controles d'acces (ACL) et autres
artefacts de permissions sont pris en compte, a l'inverse du
test -perm qui lui les ignore. Ce test utilise l'appel systeme
access(2) et peut de ce fait etre trompe par les serveurs NFS
qui font de la substitution d'identite (ou du root squashing).
En effet, de nombreux systemes implementent access(2) au niveau
du client, et ne peuvent donc se servir des substitutions
d'identite gerees du cote serveur. Puisque ce test n'est base
que sur le resultat fourni par l'appel systeme access(2), il n'y
a aucune garantie qu'un fichier trouve par ce test soit
reellement executable.
-false Toujours faux.
-fstype type
Fichier se trouvant sur un systeme de fichiers du type indique.
Les types valides de systemes de fichiers dependent de la
version d'Unix. Une liste non exhaustive des systemes acceptes
sur certaines versions d'Unix sont : ufs, 4.2, 4.3, nfs, tmp,
mfs, S51K, S52K. Vous pouvez utiliser -printf avec la directive
%F pour examiner les types de vos systemes de fichiers.
-gid n Fichier de GID numerique valant n.
-group nom_groupe
Fichier appartenant au groupe nom_groupe (eventuellement un
identifiant numerique).
-ilname motif
Semblable a -lname, mais sans differencier les majuscules et les
minuscules. Si les options -L ou -follow sont actives, ce test
renvoie toujours faux, a moins que le lien symbolique ne soit
casse.
-iname motif
Semblable a -name, mais sans differencier les majuscules et les
minuscules. Par exemple les motifs << to* >> et << T??? >>
correspondent aux noms de fichiers << Toto >>, << TOTO >>,
<< toto >>, << tOto >>, etc. Dans ces motifs, et contrairement a
l'expansion des noms de fichiers de l'interpreteur de commandes,
un << . >> initial peut correspondre au motif << * >>. Ainsi,
find -name *to acceptera le fichier << .toto >>. Notez bien que
vous devez proteger les motifs, cela va sans dire, car sinon,
l'interpreteur de commandes appliquera l'expansion aux
metacaracteres qu'ils contiennent.
-inum n
Fichier dont le numero d'inode est n. Il est en general plus
facile d'utiliser le test -samefile.
-ipath motif
Se comporter comme -iwholename. Cette option est obsolete,
veuillez ne plus l'utiliser.
-iregex motif
Semblable a -regex, mais sans differencier les majuscules et les
minuscules.
-iwholename motif
Semblable a -wholename, mais la recherche n'est pas sensible a
la casse.
-links n
Fichier ayant n liens.
-lname motif
Fichier representant un lien symbolique, dont le contenu
correspond au motif indique. Lors du developpement des
metacaracteres, << / >> et << . >> ne sont pas traites
differemment des autres caracteres. Si les options -L ou -follow
sont actives, ce test renvoie faux, sauf si le lien symbolique
est casse.
-mmin n
Fichier dont les donnees ont ete modifiees il y a n minutes.
-mtime n
Fichier dont les donnees ont ete modifiees il y a n*24 heures.
Consultez l'explication sur -atime pour comprendre comment les
arrondis affectent l'interpretation des dates de derniere
modification des fichiers.
-name motif
Fichier dont le nom de base (sans les repertoires du chemin
d'acces), correspond au motif du shell. Les metacaracteres
(<< * >>, << ? >>, et << [] >>) peuvent correspondre a un point
<< . >> au debut du nom du fichier (c'est une evolution de
findutils-4.2.2, consultez la section CONFORMITE AUX STANDARDS
plus loin). Pour ignorer un repertoire, ainsi que tous ses
fichiers, utilisez l'option -prune (vous trouverez un exemple
dans la description de l'option -path). Les parentheses ne sont
pas considerees comme des caracteres speciaux, bien que certains
interpreteurs de commandes (dont le Bash) attribuent aux
parentheses un role particulier. La correspondance avec le nom
du fichier est obtenue par l'utilisation de la fonction
fnmatch(3) de la bibliotheque. N'oubliez pas de proteger votre
motif entre guillemets afin d'eviter l'expansion des
metacaracteres par l'interpreteur de commandes.
-newer fichier
Fichier modifie plus recemment que le fichier indique. Si le
fichier fichier est un lien symbolique et que les options -H ou
-L sont actives, c'est la date de modification du fichier pointe
qui sera consideree.
-newerXY r'ef'erence
Compare le timestamp du fichier courant avec la r'ef'erence.
L'argument r'ef'erence est habituellement un nom de fichier (dans
ce cas, un de ses timestamps est utilise pour les comparaisons),
mais il peut aussi s'agir d'une chaine donnant un temps absolu.
X et Y sont des emplacements pour d'autres lettres, lettres qui
indiquent quel horodatage de la r'ef'erence est utilise pour la
comparaison.
a La date et l'heure de dernier acces au fichier r'ef'erence
B La date et l'heure de creation du fichier r'ef'erence
c La date et l'heure de changement d'etat de l'inode r'ef'erence
m La date et l'heure de derniere modification du fichier r'ef'erence
t r'ef'erence est directement interpretee en tant qu'heure
Certaines combinaisons ne sont pas valables, comme par exemple,
X utilise avec t. Certaines combinaisons ne sont pas
implementees sur certains systemes, comme par exemple B qui
n'est pas supportee par tous les systemes. Une erreur fatale
sera retournee si une combinaison non valable ou non implementee
de XY est appelee. Les dates et heures sont interpretees comme
les arguments de l'option -d de la commande date du GNU. Si
vous essayez d'utiliser la date de creation d'un fichier, et que
cette date de creation ne peut pas etre determinee, vous
obtiendrez un message d'erreur fatale. Si vous specifiez un test
qui se refere a la date de creation des fichiers a examiner, ce
test echouera pour chaque fichier pour lequel la date de
creation est inconnue.
-nogroup
Fichier dont l'identifiant de groupe numerique ne correspond a
aucun groupe d'utilisateurs.
-nouser
Fichier dont l'UID numerique ne correspond a aucun utilisateur.
-path motif
Fichier dont le nom correspond au motif motif. Les
metacaracteres << / >> ou << . >> ne sont pas interpretes, d'ou,
par exemple,
find . -path "./sr*sc"
affichera un resultat pour un repertoire appele << ./src/misc >>
(s'il existe). Pour omettre une branche complete de repertoires,
utilisez -prune plutot que de verifier chaque fichier de
l'arborescence. Pour ignorer par exemple le repertoire
<< src/emacs >> et tous ces fichiers et sous-repertoires tout en
affichant le nom des autres fichiers trouves, faites quelque
chose comme :
find . -path './src/emacs' -prune -o -print
Sachez que le motif de recherche de correspondance s'applique
sur le nom complet du fichier, en commencant des points de
depart indiques sur la ligne de commande. L'utilisation d'un
chemin absolu n'a de sens ici que si le point de depart de
recherche est lui aussi un chemin absolu. Cela signifie que la
commande suivante ne trouvera jamais rien :
find bar -path /truc/bidule/monFichier -print
Le predicat -path est aussi implemente dans le find d'HP-UX et
apparaitra dans une prochaine version du standard POSIX.
-perm mode
Fichier dont les autorisations d'acces sont fixees exactement au
mode indique (en notation symbolique ou octale). Puisqu'une
correspondance stricte est requise, vous risquez d'etre obliges
d'utiliser une chaine de caracteres plutot compliquee lorsque
vous utiliserez cette option avec le mode symbolique. -perm g=w,
par exemple, ne recherchera que les fichiers qui ont le mode
0020 (c'est a dire, ceux pour lesquels la permission d'ecriture
pour le groupe est la seule permission definie). Vous voudrez
plus certainement utiliser les formes << / >> ou << - >>, telles
que -perm -g=w, qui correspondent a tous les fichiers qui ont le
droit d'ecriture pour les groupes. Consultez la section EXEMPLES
pour des exemples plus significatifs.
-perm -mode
Fichier ayant tous les bits d'autorisations indiques dans le
mode. Les notations symboliques sont acceptees dans ce cas, et
c'est en general comme cela que l'on veut s'en servir. Vous
devez indiquer << u >>, << g >> ou << o >> si vous utilisez un
mode symbolique. Consultez la section EXEMPLES pour des exemples
plus significatifs.
-perm /mode
Fichier ayant certains des bits d'autorisations indiques dans le
mode. La notation symbolique est acceptee dans ce cas. Vous
devez indiquer << u >>, << g >> ou << o >> si vous utilisez un
mode symbolique. Consultez la section EXEMPLES pour des exemples
plus significatifs. Si aucun bit d'autorisation n'est indique
dans mode, cela correspond a tous les fichiers (l'objectif est
d'etre plus coherent avec le comportement de perm -000).
-perm +mode
Deconseille, ancienne methode pour rechercher des fichiers ayant
certains des bits d'autorisations indiques dans le mode. Vous
devez plutot utiliser -perm /mode. L'utilisation de la syntaxe
<< + >> avec la notation symbolique vous reservera des resultats
surprenants. Par exemple, << +u+x >> est une notation symbolique
valide (equivalente a +u,+x, c'est-a-dire 0111) qui ne sera donc
pas evaluee en tant que -perm +mode, mais plutot comme l'option
de recherche exacte -perm mode. Cela correspondra donc aux
fichiers avec la permission << 0111 >> precisement, et non ceux
qui ont n'importe quel bit d'execution active. Si vous ne
trouvez pas ce paragraphe clair, vous n'etes pas le seul.
Utilisez plutot -perm /mode. Cet emploi du test -perm est
deconseille parce que la specification POSIX requiert
l'interpretation du premier << + >> en tant que partie de la
notation symbolique. Nous avons donc prefere l'utilisation de
<< / >>.
-readable
Correspond aux fichiers qui sont accessibles en lecture. Les
listes de controle d'acces (ACL) et les autres artefacts de
permissions sont pris en compte, a l'inverse du test -perm qui,
lui, les ignore. Ce test utilise l'appel systeme access(2), et
peut, de ce fait, etre trompe par les serveurs NFS qui font de
la substitution d'identite (UID mapping ou root squashing). En
effet, de nombreux systemes implementent access(2) au niveau du
client, et ne peuvent donc se servir des substitutions
d'identites gerees du cote serveur.
-regex motif
Nom de fichier correspondant a l'expression rationnelle motif.
Il s'agit d'une correspondance sur le chemin complet, pas d'une
recherche. Par exemple, pour mettre en correspondance un fichier
nomme << ./fubar3 >>, vous pouvez utiliser les expressions
rationnelles << .*bar. >> ou << .*b.*3 >>, mais pas << f.*r3 >>.
Les expressions rationnelles comprises par find sont, par
defaut, celles d'Emacs. L'option -regextype permet d'en changer.
-samefile nom
Fichier qui se refere a la meme inode que nom. Quand -L est
actif, cela inclut les liens symboliques.
-size n[cwbkMG]
Fichier utilisant n unites d'espace. On pourra utiliser les
suffixes suivants :
<< b >>
Pour des blocs de 512 octets (comportement par defaut si
rien n'est indique).
<< c >>
Pour indiquer des octets.
<< w >>
Pour des mots de deux octets.
<< k >>
Pour des kilo-octets (unites de 1 024 octets).
<< M >>
Pour des mega-octets (unites de 1 048 576 octets).
<< G >>
Pour des giga-octets (unites de 1 073 741 824 octets).
La taille ne prend pas en compte les blocs indirects, mais elle
comptabilise les blocs des fichiers creux non encore alloues.
Gardez a l'esprit que les specifications de format << %k >> et
<< %b >> de -printf gerent differemment les fichiers eparpilles.
Le suffixe << b >> determine toujours des blocs de 512 octets et
jamais de 1 kilo-octets, ce qui differe du comportement de -ls.
-true Toujours vrai.
-type c
Fichier du type c :
b Fichier special en mode bloc (avec tampon)
c Fichier special en mode caractere (sans tampon)
d Repertoire
p Tube nomme (FIFO)
f Fichier regulier
l Lien symbolique, n'est jamais vrai si les options -L ou
-follow sont actives, a moins que le lien symbolique ne
soit casse. Si vous voulez rechercher des liens
symboliques alors que -L est actif, utilisez -xtype.
s Socket
D Door (Solaris)
-uid n Fichier dont l'identifiant utilisateur numerique vaut n.
-used n
Fichier dont le dernier acces date de n jours apres sa date de
derniere modification.
-user utilisateur
Fichier appartenant a l'utilisateur indique (identifiant
utilisateur numerique eventuellement).
-wholename motif
Voir -path. Cette option est moins portable que -path.
-writable
Correspond aux fichiers qui sont accessibles en ecriture. Les
listes de controle d'acces (ACL) et les autres artefacts de
permissions sont pris en compte, a l'inverse du test -perm qui,
lui, les ignore. Ce test utilise l'appel systeme access(2), et
peut, de ce fait, etre trompe par les serveurs NFS qui font de
la substitution d'identite (UID mapping ou root squashing). En
effet, de nombreux systemes implementent access(2) au niveau du
client, et ne peuvent donc se servir des substitutions
d'identites gerees du cote serveur.
-xtype c
Semblable a -type sauf si le fichier est un lien symbolique.
Pour les liens symboliques, si les options -H ou -P ont ete
specifiees, le test est vrai si le fichier pointe par le lien
est de type c ; si l'option -L a ete specifiee, le test est vrai
si c vaut << l >>. Autrement dit, pour les liens symboliques,
-xtype verifie le type des fichiers que l'option -type ne
verifie pas.
ACTIONS
-delete
Effacer les fichiers, et renvoyer vrai si l'effacement a reussi.
Si l'effacement echoue, un message d'erreur est envoye. Si
-delete echoue, le statut de sortie de find sera different de
zero (si jamais il s'interrompt). L'utilisation de l'action
-delete active automatiquement l'option -depth.
Attention : N'oubliez pas que la ligne de commande de find est
evaluee comme une expression. Ecrire -delete en premier forcera
find a essayer d'effacer tout ce qui se trouve dans les points
de depart que vous avez indique. Lorsque vous testez une ligne
de commande de find qui utilisera -delete, vous devriez preciser
l'option -depth afin d'eviter les surprises plus tard. Puisque
-delete entraine -depth, vous ne pouvez pas utiliser en meme
temps -prune et -delete.
-exec commande ;
Executer la commande ; vrai si le code de retour 0 est renvoye.
Tous les parametres qui suivent find sont consideres comme des
parametres pour la ligne de commande, jusqu'a la rencontre d'un
caractere << ; >>. La chaine << {} >> est remplacee par le nom
du fichier en cours de traitement, ceci dans toutes ses
occurrences sur la ligne de commande, et pas seulement aux
endroits ou elle est isolee, comme c'est le cas avec d'autres
versions de find. Ces deux chaines peuvent avoir besoin d'etre
protegees du developpement de la ligne de commande par le shell,
en utilisant le caractere d'echappement (<< \ >>) ou une
protection par des guillemets. Consultez la section EXEMPLES
pour des exemples d'utilisation de l'option -exec. La commande
indiquee est executee a chaque fois qu'un fichier correspond. La
commande est executee depuis le repertoire de depart. Il existe
d'inevitables problemes de securite associes a l'usage de
l'option -exec, c'est pourquoi vous devriez utiliser l'option
-execdir a la place.
-exec commande {} +
Cette variante de l'option -exec execute la commande specifiee
sur le fichier selectionne, mais en ajoutant le nom de chaque
fichier trouve a la fin de la ligne de commande. Le nombre total
d'invocation de la commande sera donc tres inferieur au nombre
de fichiers trouves. La ligne de commande est construite a la
maniere de xargs. Une seule instance de << {} >> est permise a
l'interieur de la commande. La commande sera executee dans le
repertoire de depart.
-execdir commande ;
-execdir commande {} +
Semblable a -exec, sauf que la commande indiquee sera executee a
partir du sous-repertoire contenant le fichier correspondant,
qui n'est normalement pas celui a partir duquel vous avez lance
find. C'est une methode bien plus fiable d'invocation de
commande, puisqu'elle evite des conflits de resolution de
chemins des fichiers trouves. Comme pour l'option -exec, la
forme de -execdir avec << + >> construira une ligne de commande
de telle sorte qu'elle pourra traiter plusieurs fichiers trouves
en une passe (avec une restriction, chaque invocation de
commande ne portera que sur une liste de fichiers issue d'un
seul et meme repertoire). Si vous utilisez cette option, veillez
bien a ce que votre variable d'environnement $PATH ne contienne
pas une reference au repertoire courant << . >>, sinon un
pirate pourrait lancer toutes les commandes qu'il souhaite en
mettant un fichier au nom adequat dans les repertoires ou vous
allez lancer un -execdir. De la meme maniere, evitez les
references vides ou les noms de repertoires exprimes en relatif
dans $PATH.
-fls fichier
Vrai ; semblable a -ls, mais ecrire dans le fichier comme le
fait -fprint. Le fichier en sortie est toujours cree, meme si le
predicat n'est jamais verifie. Consultez la section NOMS DE
FICHIERS PEU COURANTS pour obtenir des informations sur la
gestion des caracteres inhabituels dans les noms de fichier.
-fprint fichier
Vrai ; ecrire le nom complet dans le fichier. Si fichier
n'existe pas au demarrage de find, il est cree. S'il existe, il
est ecrase. Les noms de fichier << /dev/stdout >> et
<< /dev/stderr >> sont traites de maniere particuliere, ils
correspondent respectivement a la sortie standard et a la sortie
d'erreurs. Le fichier de sortie est toujours cree, meme si le
predicat n'est jamais verifie. Consultez la section NOMS DE
FICHIERS PEU COURANTS pour obtenir des informations sur la
gestion des caracteres inhabituels dans les noms de fichiers.
-fprint0 fichier
Vrai ; semblable a -print0 mais ecrire dans le fichier comme le
fait -fprint. Le fichier de sortie est toujours cree, meme si le
predicat n'est jamais verifie. Consultez la section NOMS DE
FICHIERS PEU COURANTS pour obtenir des informations sur la
gestion des caracteres inhabituels dans les noms de fichiers.
-fprintf fichier format
Vrai ; semblable a -printf mais ecrire dans le fichier comme le
fait -fprint. Le fichier de sortie est toujours cree, meme si le
predicat n'est jamais verifie. Consultez la section NOMS DE
FICHIERS PEU COURANTS pour obtenir des informations sur la
gestion des caracteres inhabituels dans les noms de fichiers.
-ls Vrai, afficher le nom du fichier en cours dans le format ls
-dils sur la sortie standard. La taille est calculee en blocs de
1 Ko, a moins que la variable d'environnement POSIXLY_CORRECT ne
soit positionnee, auquel cas la taille est calculee en blocs de
512 octets. Consultez la section NOMS DE FICHIERS PEU COURANTS
pour obtenir des informations sur la gestion des caracteres
inhabituels dans les noms de fichier.
-ok commande ;
Comme -exec mais interroger d'abord l'utilisateur. Si
l'utilisateur aquiesce, la commande est lancee. Sinon, le test
devient faux. Si la commande est lancee, son entree standard est
redirigee depuis /dev/null.
La reponse a la question posee est comparee a deux expressions
rationnelles afin de determiner s'il s'agit d'une reponse
positive ou negative. Ces expressions rationnelles sont donnees
par le systeme si la variable d'environnement `POSIXLY_CORRECT'
est definie, et dans le cas contraire, dans les traductions des
messages de find. Si le systeme n'a aucune definition
appropriee, les propres definitions de find seront utilisees.
Dans tous les cas, l'interpretation de ces expressions
rationnelles sera modifiee par les variables d'environnement
'LC_CTYPE' (classe de caracteres) et 'LC_COLLATE' (caracteres
etendues et equivalencede classes).
-okdir commande ;
Comme -execdir mais interroge d'abord l'utilisateur comme dans
le cas de -ok. Si l'utilisateur n'acquiesce pas, le test
devient faux. Si la commande est lancee, son entree standard est
redirigee depuis /dev/null.
-print Vrai ; afficher le nom complet du fichier sur la sortie
standard, suivi d'un saut de ligne. Si vous redirigez la sortie
standard de find vers un autre programme et qu'il y a la moindre
chance qu'un des noms des fichiers que vous recherchez contienne
un saut de ligne, alors vous devriez tres serieusement opter
pour l'option -print0 plutot que -print. Consultez la section
NOMS DE FICHIERS PEU COURANTS pour obtenir des informations sur
la gestion des caracteres inhabituels dans les noms de fichier.
-print0
Vrai ; afficher le nom complet du fichier sur la sortie
standard, suivi d'un caractere nul (a la place du caractere saut
de ligne que -print utilise). Ceci permet aux fichiers dont le
nom contient un saut de ligne ou d'autres types de caracteres
non affichables, d'etre correctement interpretes par les
programmes utilisant les donnees en sortie de find. Cette option
correspond a l'option -0 de xargs.
-printf format
Vrai ; afficher le format indique sur la sortie standard, en
interpretant les sequences d'echappement << \ >> et les
directives << % >>. La largeur et la precision des champs
peuvent etre specifies comme dans la fonction << printf >> du
langage C. Notez bien que la plupart des champs sont affiches
selon %s plutot que %d, ce qui veut dire que les drapeaux ne
fonctionneront peut-etre pas comme vous vous y attendiez. Cela
veut aussi dire que le drapeau << - >> fonctionnera (il force
l'alignement des champs a gauche). Contrairement a -print,
-printf n'ajoute pas de saut de ligne a la fin de la chaine. Les
sequences d'echappement et les directives sont les suivantes :
\a Sonnerie.
\b Effacement arriere (Backspace).
\c Arreter immediatement l'impression du format et vider le
flux de sortie.
\f Saut de page.
\n Saut de ligne.
\r Retour chariot.
\t Tabulation horizontale.
\v Tabulation verticale.
\0 Caractere ASCII NUL.
\\ Un caractere << \ >> litteral.
\NNN Le caractere ASCII dont le code est NNN (en octal).
Un << \ >> suivi de n'importe quel autre caractere est traite
comme un caractere ordinaire ; ils sont donc affiches tous les
deux.
%% Un caractere pourcentage litteral (%).
%a Date du dernier acces au fichier, dans le format renvoye
par la fonction C ctime(3).
%Ak Date du dernier acces au fichier, dans le format specifie
par k, qui doit etre soit un << @ >>, soit une directive
pour la fonction C << strftime >>. Les valeurs possibles
de k sont indiquees ci-dessous, certaines d'entre-elles
ne sont pas disponibles sur tous les systemes, a cause
des differences entre les fonctions << strftime >>
existantes.
@ Secondes ecoulees depuis le 1er janvier 1970 a
00 h 00 GMT, avec une partie decimale.
Champs horaires :
H Heure (00..23)
I Heure (01..12)
k Heure (0..23)
l Heure (1..12)
M Minute (00..59)
p AM ou PM, avec la designation locale
r Heure au format 12 heures (hh:mm:ss [AP]M)
S Seconde (00.00 .. 61.00). Accepte une partie
decimale.
T Heure au format 24 heures (hh:mm:ss)
+ La date et l'heure, separees par un << + >>,
<< 2004-04-28+22:22:05 >> par exemple. Ceci est
une extension GNU. L'heure est donnee dans la zone
horaire courante (qui peut etre modifiee via la
variable d'environnement TZ). Le second champ
contient une partie decimale.
X Representation locale de l'heure (H:M:S)
Z Fuseau horaire (par exemple MET), ou rien si le
fuseau horaire est indetermine.
Champs de date :
a Abreviation locale du jour de la semaine
(lun..dim)
A Nom local entier du jour de la semaine, de
longueur variable (lundi..dimanche)
b Abreviation locale du mois (jan..dec)
B Nom local entier du mois, de longueur variable
(janvier..decembre)
c Date et heure locale (Sat Nov 04 12:02:33 EST
1989). Le format utilise est le meme que pour
ctime(3), et, afin de preserver la compatibilite
avec ce format, il n'y a pas de partie decimale
pour les secondes.
d Quantieme du mois (01..31)
D Date (mm/jj/aa)
h Identique a b
j Jour de l'annee (001..366)
m Mois (01..12)
U Numero de la semaine dans l'annee, les semaines
commencant le dimanche (00..53)
w Jour de la semaine (0..6)
W Numero de la semaine dans l'annee, les semaines
commencant le lundi (00..53)
x Representation locale de la date (mm/jj/aa)
y Les deux derniers chiffres de l'annee (00..99)
Y Annee (1970...)
%b Taille de l'espace disque consomme par le fichier, en
nombre de blocs de 512 octets. Puisque l'espace disque
est alloue par multiple de la taille d'un bloc du systeme
de fichiers, on obtient souvent un resultat superieur a
%s/512. Il peut aussi etre inferieur si le fichier est
creux (sparse file).
%c Date de derniere modification du statut du fichier, dans
le format renvoye par la fonction C << ctime >>.
%Ck Date de derniere modification du statut du fichier, dans
le format specifie par k, comme pour la directive %A.
%d Profondeur du fichier dans l'arborescence des
repertoires, 0 signifiant que le fichier est un parametre
de la ligne de commande.
%D Le numero du peripherique sur lequel le fichier est range
(la valeur du champ st_dev field de la structure stat)
exprime en decimal.
%f Nom du fichier, sans aucun nom de repertoire (dernier
element uniquement).
%F Type de systeme de fichiers sur lequel se trouve le
fichier. Cette valeur peut etre utilisee pour l'option
-fstype.
%g Nom du groupe proprietaire du fichier, ou identifiant de
groupe numerique si le groupe n'a pas de nom.
%G Identifiant de groupe numerique du fichier.
%h Repertoires en tete du nom de fichier (tout sauf la
derniere partie). Si le nom du fichier ne contient aucune
barre oblique (NDT : slash) (donc si c'est un fichier du
repertoire courant), alors l'option %h rajoutera << . >>.
%H Parametre de la ligne de commande a partir duquel le
fichier a ete trouve.
%i Numero d'inode du fichier (en decimal).
%k Taille du fichier, en nombre de blocs de 1 kilo-octet.
Puisque l'espace disque est alloue par multiple de la
taille d'un bloc du systeme de fichiers, on obtient
souvent un resultat superieur a %s/1024. Il peut aussi
etre inferieur si le fichier est eparpille.
%l Destination du lien symbolique (vide si le fichier n'est
pas un lien symbolique).
%m Bits d'autorisation d'acces au fichier (en octal). Cette
option utilise les nombres << traditionnellement >>
utilises dans la plupart des implementations d'Unix, mais
si votre systeme utilise un ordre inhabituel de la forme
octale des bits de permissions, alors vous observerez une
difference entre la valeur reelle des modes du fichiers
et la sortie de %m. On veut habituellement un zero en
debut de ce nombre, et pour l'obtenir, vous pouvez
utiliser le drapeau # (<< %#m >>, par exemple).
%M Les permissions du fichier (sous forme symbolique, comme
dans ls). Cette directive n'est disponible que dans les
versions de findutils 4.2.5 et suivantes.
%n Nombre de liens physiques sur le fichier.
%p Nom du fichier.
%P Nom du fichier, en retirant le nom du parametre de ligne
de commande a partir duquel le fichier a ete trouve.
%s Taille du fichier en octets.
%S Densite du fichier, calculee par la formule
(TAILLEBLOC*nb_bloc/taille_fichier). La valeur obtenue
pour un fichier regulier d'une certaine taille depend du
systeme d'exploitation. Toutefois, la valeur normalement
attendue pour un fichier creux (sparse file) est
inferieure a 1.0, tandis qu'un fichier qui utilise
l'indirection de blocs pourra obtenir une valeur
superieure a 1.0. La valeur de TAILLEBLOC est dependante
du systeme, mais est souvent de 512 octets. Si le fichier
a une taille nulle, la valeur affichee est indefinie. Sur
les systemes qui n'offre pas la gestion des nombres de
blocs, la valeur de la densite du fichier sera de 1.0.
%t Date de derniere modification du fichier, dans le format
renvoye par la fonction C << ctime >>.
%Tk Date de derniere modification du fichier, dans le format
specifie par k, comme pour la directive %A.
%u Nom du proprietaire du fichier, ou identifiant
utilisateur numerique si l'utilisateur n'a pas de nom.
%U Identifiant utilisateur numerique du proprietaire du
fichier.
%y Type du fichier (comme dans ls -l), U pour type inconnu
(ce qui ne devrait pas arriver).
%Y Type du fichier (comme pour %y), suivi, pour les liens
symbolique, de : L=boucle, N=inexistant.
Un caractere << % >> suivi de n'importe quel autre caractere est
supprime, mais le second caractere est affiche (ne soyez pas
trop confiant cependant, car de nouveaux caracteres de format
pourront etre un jour utilises). Un << % >> a la fin de
l'argument de format peut engendrer un comportement aleatoire
puisqu'il n'y a aucun caractere suivant. Ce qui peut etre plus
ou moins grave suivant les cas.
Les options %m et %d gerent les drapeaux #, 0 et +, a l'inverse
des autres directives, meme si elles affichent des nombres. Les
autres directives numeriques qui ne gerent pas ces drapeaux sont
G, U, b, D, k et n. Le drapeau de format << - >> est gere, et
transforme l'alignement des champs (qui sont par defaut alignes
a droite) en alignement a gauche.
Consultez la section NOMS DE FICHIERS PEU COURANTS pour obtenir
des informations sur la gestion des caracteres inhabituels dans
les noms de fichier.
-prune Vrai ; Si le fichier est un repertoire, ne pas le parcourir. Si
l'option -depth est utilisee : faux, aucun effet. Puisque
-delete entraine -depth, vous ne pouvez pas utiliser
conjointement -prune et -delete.
-quit Arreter immediatement. Tous les processus fils seront arretes,
et plus aucun des chemins indiques sur la ligne de commande ne
sera traite. find /tmp/toto /tmp/titi -print -quit n'affichera
que /tmp/toto, par exemple. Toute ligne de commande construite
par -execdir ... {} + sera executee avant l'arret de find. La
valeur de retour sera ou ne sera pas zero, selon qu'une erreur
ait eu lieu precedemment ou non.
NOMS DE FICHIERS PEU COURANTS
Beaucoup d'actions de find finissent par afficher des donnees qui sont
sous le controle d'autres utilisateurs. Cela est vrai pour les noms de
fichiers, les tailles, les dates de modification et ainsi de suite. Les
noms de fichiers posent des problemes potentiels puisqu'ils peuvent
contenir n'importe quel caractere, a l'exception de << \0 >> et
<< / >>. Les caracteres inhabituels dans les noms de fichier peuvent
produire des resultats inattendus et souvent indesirables sur votre
terminal (modifier les definitions des touches de fonctions de certains
terminaux, par exemple). Les caracteres inhabituels sont geres de
differentes facons selon les actions, selon la description ci-dessous.
-print0, -fprint0
Affiche toujours exactement le nom de fichier non modifie, meme
si la sortie est un terminal.
-ls, -fls
Tout caractere inhabituel est toujours protege. Les espaces, les
barres obliques inverses et les guillemets sont affiches selon
les conventions des echappements du C (<< \f >>,<< \" >>, par
exemple). Tous les autres caracteres inhabituels sont affiches
en octal. Tous les autres caracteres affichables (en ce qui
concerne -ls et -fls, il s'agit des caracteres dont le code
octal est compris entre 041 et 0176) sont affiches en l'etat.
-printf, -fprintf
Si la sortie n'est pas un terminal, les caracteres sont affiches
en l'etat. Sinon, le resultat depend de la directive en cours
d'utilisation. Les directives %D, %F, %g, %G, %H, %Y et %y sont
transformees en valeurs non controlees par les proprietaires des
fichiers, et donc imprimees telles quelles. Les directives %a,
%b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u et %U donnent des
valeurs qui sont sous le controle des proprietaires des
fichiers, mais qui ne peuvent pas etre utilisees pour envoyer
des donnees arbitraires au terminal, elles sont donc imprimees
telles quelles. Les directives %f, %h, %l, %p et %P sont
protegees par des guillemets. Cette protection est appliquee a
la maniere du ls du GNU. Il ne s'agit pas du meme mecanisme de
protection que celui utilise pour -ls et -fls. Si vous pouvez
choisir le format a utiliser pour la sortie de find, sachez
qu'il vaut mieux utiliser << \0 >> plutot que nouvelle ligne en
tant que terminaison, car les noms de fichiers peuvent contenir
des caracteres espaces ou nouvelle ligne. Le reglage de la
variable d'environnement `LC_CTYPE' permet de definir la liste
des caracteres qui doivent etre proteges.
-print, -fprint
Les guillemets sont geres a la maniere de -printf et -fprintf.
Si vous utilisez find dans un script ou dans un cas de figure
particulier dans lesquels les fichiers correspondants peuvent
avoir des noms arbitraires, l'utilisation de -print0 devrait
etre preferee a -print.
Les actions -ok et -okdir affichent le nom du fichier traite tel qu'il
est. Cela pourrait changer dans une version ulterieure.
OP'ERATEURS
Dans l'ordre de priorite decroissante :
( expr )
Forcer la precedence. Comme les parentheses risquent d'etre
interpretees par le shell, vous devriez normalement les
proteger. De nombreux exemples de cette page de manuel utilise
l'antislash dans ce but, par exemple << \(...\) >> au lieu de
<< (...) >>.
! expr Vrai si expr est faux. Ce caractere doit habituellement etre
protege pour eviter d'etre interprete par le shell.
-not expr
Identique a ! expr, mais non conforme a la norme POSIX.
expr1 expr2
Deux expressions sur la meme ligne sont implicitement reliees
par un ET ; expr2 n'est pas evaluee si expr1 est fausse.
expr1 -a expr2
Identique a expr1 expr2.
expr1 -and expr2
Identique a expr1 expr2, mais non conforme a la norme POSIX.
expr1 -o expr2
OU ; expr2 n'est pas evaluee si expr1 est vraie.
expr1 -or expr2
Identique a expr1 -o expr2, mais non conforme a la norme POSIX.
expr1 , expr2
Lister ; expr1 et expr2 sont toujours evaluees. La valeur de
expr1 est annulee, la valeur de la liste est la valeur de expr2.
Le separateur virgule est pratique pour rechercher differents
types de choses tout en ne traversant qu'une fois l'arborescence
du systeme de fichiers. L'action -fprintf peut etre utilisee
pour recuperer une liste d'elements varies pour les ranger dans
differents fichiers en sortie.
CONFORMIT'E AUX STANDARDS
Definissez la variable d'environnement POSIXLY_CORRECT pour une
compatibilite au plus proche du standard POSIX. Les options suivantes
sont definies dans le standard POSIX (IEEE Std 1003.1, Edition 2003) :
-H Cette option est geree.
-L Cette option est geree.
-name Cette option est geree, mais la conformite a POSIX depend de la
conformite POSIX de la fonction fnmatch(3) de la bibliotheque du
systeme. A l'heure de findutils-4.2.2, les metacaracteres du
shell (<< * >>, << ? >> ou << [] >> par exemple) trouveront les
fichiers commencant par << . >> (l'interpretation d'IEEE PASC
126 l'impose). Ceci differe des versions precedentes de
findutils.
-type Geree. POSIX definit << b >>, << c >>, << d >>, << l >>,
<< p >>, << f >> et << s >>. Le find du GNU gere aussi << D >>,
ce qui represente une Porte, pour les systemes d'exploitation
qui en fournissent.
-ok Geree. L'interpretation de la reponse est soumise aux schemas
('patterns') choisis grace au reglage de la variable
d'environnement `LC_MESSAGES'. Lorsque la variable
d'environnement `POSIXLY_CORRECT' est definie, ces schemas sont
obtenus a partir de la definition des reponses positives (yes)
et negatives (no) du systeme. Consultez la documentation
nl_langinfo(3) du systeme, et notamment YESEXPR et NOEXPR.
Lorsque `POSIXLY_CORRECT' n'est pas defini, ces schemas sont
extraits du propre catalogue de messages de find.
-newer Geree. Si le fichier specifie est un lien symbolique, il est
toujours dereference. Ceci est different du comportement
precedent, qui prenait en compte les valeurs de temps du lien
symbolique (consultez la section HISTORIQUE plus loin).
-perm Geree. Si la variable d'environnement POSIXLY_CORRECT n'est pas
definie, quelques arguments de mode d'acces (par exemple +a+x),
bien que non valables en POSIX, sont geres par souci de
compatibilite.
Autres predicats
Les predicats -atime, -ctime, -depth, -group, -links, -mtime,
-nogroup, -nouser, -perm, -print, -prune, -size, -user et -xdev
sont tous geres.
Le standard POSIX definit les parentheses << ( >>, << ) >>, la negation
<< ! >> et les operateurs << and >> et << or >> (-a, -o).
Toutes les autres options, predicats, expressions et ainsi de suite
sont des extensions hors du standard POSIX. Beaucoup de ces extensions
ne sont de toutes facons pas l'apanage du find du GNU.
Le standard POSIX impose que find detecte les boucles.
L'utilitaire find doit detecter les boucles infinies, telles que
le retour dans un repertoire deja visite, alors qu'on revient du
dernier fichier rencontre. Quand il detecte une boucle infinie,
find doit afficher un message de diagnostic sur la sortie
d'erreur, et essayer de revenir a sa position d'origine ou
s'arreter.
La commande find du GNU est conforme a cette exigence. Le decompte des
liens dans un repertoire qui contient des liens en dur vers des
repertoires superieurs sera souvent inferieur a celui attendu. Cela
peut etre du au fait que le find du GNU optimise l'acces en evitant de
parcourir un sous-repertoire qui s'avere etre un lien vers un
repertoire superieur. Bien que find ne parcourt pas le repertoire dans
ce cas precis, il permet aussi d'eviter l'emission d'un message
d'avertissement. Cette facon de faire peut sembler generatrice
d'erreurs, mais il est peu probable que quiconque puisse reellement en
etre gene. Si l'optimisation du parcours des feuilles (NDT : leaf) a
ete desactivee avec -noleaf, cette entree du repertoire sera bel et
bien parcourue, et le message d'avertissement emis si necessaire. Les
liens symboliques ne peuvent pas servir a creer de telles boucles dans
le systeme de fichiers, par contre, si les options -L ou -follow sont
actives, alors un message d'avertissement sera emis quand find
rencontrera une boucle de liens symboliques. Comme pour les boucles
contenant des liens en dur, l'optimisation de parcours des feuilles
(NDT : leaf) signifie souvent que find sait qu'il n'a pas a appliquer
stat() ou chdir() sur le lien symbolique, et donc que ce diagnostic est
souvent inutile.
L'option -d est geree pour des raisons de compatibilite avec divers
systemes BSD, mais preferez plutot l'utilisation de l'option -depth
conforme POSIX.
Le positionnement de la variable d'environnement POSIXLY_CORRECT ne
modifie pas le comportement des tests -regex or -iregex parce que ces
tests ne sont pas definis dans le standard POSIX.
VARIABLES D'ENVIRONNEMENT
LANG Fournit une valeur par defaut pour les variables de localisation
qui ne sont pas definies ou nulles.
LC_ALL Si elle contient une chaine de caracteres non vide, remplace les
valeurs de toutes les autres variables de localisation.
LC_COLLATE
Le standard POSIX exige que cette variable modifie le
comportement de la recherche de motifs a l'oeuvre dans l'option
-name. Le find du GNU utilise la fonction fnmatch(3) de la
bibliotheque, et donc la gestion du << LC_COLLATE >> depend de
la bibliotheque presente sur votre systeme. Cette variable
affecte egalement l'interpretation de la reponse a -ok ; alors
que la variable << LC_MESSAGES >> selectionne le motif
effectivement utilise pour interpreter la reponse a -ok,
l'interpretation des expressions entre crochet dans le motif
sera affectee par << LC_COLLATE >>.
LC_CTYPE
Cette variable controle le traitement des classes de caracteres
utilisees dans les expressions rationnelles ainsi que dans le
test -name, si la fonction fnmatch(3) fournie par la
bibliotheque le gere. Cette variable altere aussi
l'interpretation de toute classe de caracteres des expressions
rationnelles utilisees pour analyser la reponse donnee aux
questions posees par -ok. La variable d'environnement
`LC_CTYPE' modifie aussi la liste des caracteres dit
non-imprimables lors de l'affichage des noms de fichiers.
Consultez la section 'NOMS DE FICHIERS INHABITUELS'.
LC_MESSAGES
Definit la locale a utiliser pour les messages
internationalises. Lorsque la variable d'environnement
`POSIXLY_CORRECT' est definie, cela determine aussi
l'interpretation des reponses fournies aux questions posees par
l'action -ok.
NLSPATH
Determine l'endroit ou sont ranges les catalogues de messages
localises.
PATH Determine les repertoires dans lesquels find cherchera les
executables invoques par -exec, -execdir, -ok et -okdir.
POSIXLY_CORRECT
Determine la taille des blocs utilises par -ls et -fls. Si
POSIXLY_CORRECT est defini, les blocs sont des unites de 512
octets. Sinon, il s'agit d'unites de 1024 octets.
Definir cette variable desactive aussi par defaut les messages
d'avertissement (c'est-a-dire entraine -nowarn), puisque POSIX
impose que sauf dans le cas de l'affichage de -ok, tous les
messages affiches sur stderr doivent etre des messages de
diagnostic et ne doivent etre generes que dans le cas d'une
sortie avec un statut different de zero.
Lorsque POSIXLY_CORRECT n'est pas definie, -perm +zzz est gere
de la meme facon que -perm /zzz, lorsque +zzz n'est pas un mode
symbolique valable. Lorsque POSIXLY_CORRECT est definie, une
telle demande est consideree comme une erreur.
Lorsque POSIXLY_CORRECT est defini, la reponse aux questions
posees par l'action -ok est analysee selon le catalogue des
messages du systeme, et non selon les propres messages du
catalogue de find.
TZ Modifie le fuseau horaire utilise dans le format de certaines
directives liees au temps dans -printf et -fprintf.
EXEMPLES
find /tmp -name noyau -type f -print | xargs /bin/rm -f
Chercher les fichiers qui s'appellent noyau dans le repertoire /tmp et
ses sous-repertoires, puis les effacer. Rappelez-vous que vous pouvez
rencontrer des problemes si des noms de fichiers comportent des retours
a la ligne, des guillemets simples ou doubles, ou des espaces.
find /tmp -name noyau -type f -print0 | xargs -0 /bin/rm -f
Chercher les fichiers qui s'appellent noyau dans le repertoire /tmp et
ses sous-repertoires, puis les effacer, en veillant a ce que les noms
de fichiers ou de repertoires qui contiennent des retours a la ligne,
des guillemets simples ou doubles ou des espaces soient correctement
traites. Le test -name est prioritaire sur le test -type afin d'eviter
l'appel de stat(2) pour chacun des fichiers.
find . -type f -exec file '{}' \;
Executer << file >> sur chaque entree du repertoire courant ou de ses
sous-repertoires. Attention a bien proteger les accolades par des
guillemets simples afin d'empecher leur interpretation en tant que
ponctuation du script shell. De la meme facon, le point-virgule est
protege grace a une barre oblique inverse, bien que l'apostrophe aurait
aussi pu etre utilisee.
find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/grand.txt %-10s %p\n \)
Parcourir le systeme de fichiers en une seule passe, stockant les
fichiers et repertoires en setuid dans /root/suid.txt et les gros
fichiers dans /root/grand.txt.
find $HOME -mtime 0
Rechercher les fichiers de votre repertoire personnel qui ont ete
modifies lors des dernieres vingt-quatre heures. Cette commande
s'exprime de cette facon parce que la recherche utilise le resultat de
la division entiere par 24 de l'heure de derniere modification (la
fraction horaire est donc perdue). Ce qui veut dire que pour
correspondre a -mtime 0, un fichier doit avoir une anteriorite de
modification inferieure a 24 heures.
find /sbin /usr/sbin -executable \! -readable -print
Rechercher les fichiers qui offrent le droit d'execution, mais qui ne
sont pas lisibles.
find . -perm 664
Rechercher les fichiers qui ont la permission de lire et d'ecrire pour
leur proprietaire et groupe, et que les autres utilisateurs ne peuvent
que lire. Les fichiers qui satisfont ces criteres, mais qui ont
d'autres bits de permissions actives (par exemple si le fichier est
executable) ne seront pas selectionnes.
find . -perm -664
Rechercher les fichiers qui ont la permission de lire et d'ecrire pour
leur proprietaire et leur groupe, et que les autres utilisateurs
peuvent lire, sans toutefois s'interesser a la presence d'autres bits
de permissions (le bit d'execution par exemple). Un fichier ayant par
exemple les droits 0777 sera selectionne.
find . -perm /222
Rechercher les fichiers qui offrent le droit d'ecriture a quelqu'un
(son proprietaire, ou son groupe, ou bien encore n'importe qui).
find . -perm /220
find . -perm /u+w,g+w
find . -perm /u=w,g=w
Ces commandes font toutes les trois la meme chose, mais la premiere
utilise le mode octal pour representer les modes du fichier, alors que
les deux autres se servent de la forme symbolique. Ces commandes
recherchent tous les fichiers dans lesquels soit le proprietaire soit
le groupe peut ecrire. Ces fichiers n'ont pas a offrir a la fois le
droit d'ecriture au proprietaire et au groupe, l'un ou l'autre suffira.
find . -perm -220
find . -perm -g+w,u+w
Ces commandes font toutes deux la meme chose, c'est-a-dire rechercher
les fichiers qui offrent le droit d'ecriture au proprietaire ainsi
qu'au groupe.
find . -perm -444 -perm /222 ! -perm /111
find . -perm -a+r -perm /a+w ! -perm /a+x
Ces commandes recherchent toutes deux les fichiers qui sont lisibles
par tous (perm -444 ou -perm -a+r), ont au moins un des bits d'ecriture
actif (-perm /222 ou -perm /a+w), mais qui ne sont executables par
personne (respectivement ! -perm /111 et ! -perm /a+x)
cd /source-dir
find . -name .snapshot -prune -o \( \! -name *~ -print0 \)|
cpio -pmd0 /dest-dir
Cette commande copie le contenu de /source-dir dans /dest-dir, sauf les
fichiers et repertoires s'appelant .snapshot (et tout ce qu'ils
contiennent). Elle ne copie pas non plus les fichiers ou repertoires
dont le nom finit par ~, mais copie par contre leur contenu. La
structure -prune -o \( ... -print0 \) est assez connue. L'idee ici,
c'est que l'expression avant -prune indique les fichiers a couper.
Toutefois, l'action -prune renvoie vrai, donc le -o qui suit n'applique
l'expression a sa droite que sur les repertoires qui n'ont pas ete
coupes (le contenu des repertoires coupes n'est meme pas consulte).
L'expression a droite du -o est entre parentheses pour des raisons de
clarte uniquement. L'accent est mis ici sur le fait que l'action
-print0 ne s'execute que pour les items qui n'ont pas ete coupes par
-prune. Le << et >> implicite entre les conditions de tests est plus
prioritaire que le -o, mais les parentheses aident a comprendre ce
qu'il se passe ici.
find repo/ -exec test -d {}/.svn -o -d {}/.git -o -d {}/CVS ; \
-print -prune
Etant donne les repertoires de projets suivants et les repertoires
d'administration de leurs systemes de gestion de configuration,
effectuer une recherche efficace dans les racines des projets :
repo/project1/CVS
repo/gnu/project2/.svn
repo/gnu/project3/.svn
repo/gnu/project3/src/.svn
repo/project4/.git
Dans cet exemple, -prune evite l'inutile inspection des repertoires qui
ont deja ete decouverts (ne cherche pas par exemple dans project3/src
puisqu'il a deja ete trouve dans project3/.svn) tout en s'assurant que
les repertoires freres (project2 et project3) le sont.
VALEURS DE RETOUR
find s'arrete en renvoyant la valeur de retour 0 si tous les fichiers
ont ete traites avec succes, ou en renvoyant une valeur superieure a 0
si une erreur est survenue. Cette information est volontairement tres
floue. Considerez simplement qu'en cas de valeur de retour differente
de zero, vous ne devez pas vous fier a l'exactitude des resultats
fournis par find.
VOIR AUSSI
locate(1), locatedb(5), updatedb(1), xargs(1), chmod(1), fnmatch(3),
regex(7), stat(2), lstat(2), ls(1), printf(3), strftime(3), ctime(3),
Finding Files (en ligne dans Info, ou en version imprimee)
HISTORIQUE
A l'heure de findutils-4.2.2, les metacaracteres du shell (<< * >>,
<< ? >> ou << [] >> par exemple) trouveront les fichiers commencant par
<< . >> parce que l'interpretation d'IEEE POSIX 126 l'impose.
-perm /MODE remplace la syntaxe -perm +MODE, qui est depreciee depuis
findutils-4.2.21. -perm /000 correspond maintenant a tous les fichiers
plutot qu'a aucun, comme dans findutils-4.3.3.
La gestion des nanosecondes dans les timestamps a ete implementee dans
findutils-4.3.3.
L'action -delete force find a envoyer un statut de sortie non nul en
cas d'echec, comme dans findutils-4.3.11. Toutefois, find ne
s'interrompra pas immediatement. Dans les versions precedentes, le
statut de sortie de find n'etait pas modifie par l'echec de -delete.
Fonctionnalites Ajoutees Offertes dans
-newerXY 4.3.3 BSD
-D 4.3.1
-O 4.3.1
-readable 4.3.0
-writable 4.3.0
-executable 4.3.0
-regextype 4.2.24
-exec ... + 4.2.12 POSIX
-execdir 4.2.12 BSD
-okdir 4.2.12
-samefile 4.2.11
-H 4.2.5 POSIX
-L 4.2.5 POSIX
-P 4.2.5 BSD
-delete 4.2.3
-quit 4.2.3
-d 4.2.3 BSD
-wholename 4.2.0
-iwholename 4.2.0
-ignore_readdir_race 4.2.0
-fls 4.0
-ilname 3.8
-iname 3.8
-ipath 3.8
-iregex 3.8
FAUX BOGUES
$ find . -name *.c -print
find : les chemins doivent preceder l'expression
Syntaxe : find [-H] [-L] [-P] [-Oniveau] [-D help|tree|search|stat|rates|opt|exec] [CHEMIN...] [EXPRESSION]
Cette erreur survient parce que *.c a ete interprete par le shell, et
que la commande find a en fait recu une ligne de commande qui
ressemblait a :
find . -name bigram.c code.c frcode.c locate.c -print
Cette commande ne peut bien sur en aucun cas fonctionner. Plutot que de
vous y prendre de cette facon, vous pourriez proteger votre motif de
recherche par des guillemets ou proteger les caracteres jokers :
$ find . -name \*.c -print
BOGUES
Des problemes de securite se posent, inherent au comportement de find
tel que definit par le standard POSIX, et qui ne peuvent donc etre
resolus. Par exemple, l'action -exec est dangereuse par nature, et
l'usage de -execdir est preferable. Consultez plutot Finding Files pour
plus de details.
La variable d'environnement LC_COLLATE n'a aucun effet sur l'action
-ok.
La meilleure facon de signaler un bogue est d'utiliser le formulaire en
ligne sur http://savannah.gnu.org/bugs/?group=findutils. L'interet de
cette methode est que vous pourrez ensuite suivre l'evolution de la
resolution du probleme. Tout autre commentaire concernant find(1) et le
paquet findutils en general peut etre envoye a la liste de diffusion
bug-findutils. Pour vous abonner a cette liste, envoyez un courriel a
bug-findutils-request@gnu.org.
TRADUCTION
Cette page de manuel a ete traduite et mise a jour par Christophe
Blaess entre 1997 et 2003. La version presente dans Debian est
dorenavant maintenue par Sylvain Cherrier <sylvain DOT cherrier AT free
DOT fr> et les membres de la liste <debian-l10n-french AT lists DOT
debian DOT org>. Veuillez signaler toute erreur de traduction par un
rapport de bogue sur le paquet manpages-fr-extra.
FIND(1)