FIND(1) General Commands Manual FIND(1) NOM find - Rechercher des fichiers dans une hierarchie de repertoires SYNOPSIS find [-H] [-L] [-P] [-D options_debogage] [-Oniveau] [point-depart...] [expression] DESCRIPTION Cette page de manuel documente la version GNU de find. GNU find parcourt les arborescences des repertoires ayant pour racine chaque point de depart donne en evaluant l'expression 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 aucun point de depart n'est specifie, << . >> est presume. 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 qui s'appelle Finding Files et qui est fournie par findutils. Ce document 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'expression -print qui est utilisee (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, mais cela ne fonctionne pas vraiment vu la maniere dont find determine la fin de la suite de parametres de chemin : il le fait en lisant jusqu'a ce qu'un parametre d'expression n'arrive (qui commence aussi par un << - >>). Maintenant, si un parametre de chemin commence par un << - >>, find le traiterait plutot comme un parametre d'expression. Ainsi, pour s'assurer que tous les points de depart sont consideres comme tels, et surtout pour empecher que des motifs de joker developpes par l'interpreteur appelant ne soient malencontreusement traites comme des parametres d'expression, il est en general plus sur de faire commencer les chemins de recherche douteux ou les jokers par << ./ >> ou d'utiliser un chemin absolu commencant par un << / >>. Autrement, il est generalement sur, bien que non portable, d'utiliser l'option GNU -files0-from pour passer des points de depart arbitraires a find. -P Ne jamais suivre les liens symboliques. C'est le comportement par defaut. Quand find analyse ou affiche les informations concernant des fichiers, et quand le fichier est un lien symbolique, les informations utilisees sont celles qui concernent les proprietes du lien symbolique lui-meme. -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 actions qui peuvent casser des liens symboliques pendant l'execution de find (par exemple -delete) peuvent aboutir a des comportements perturbants. L'utilisation de -L fait toujours renvoyer faux a -lname et -ilname. -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. 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 pas 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 commence. 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 aura ete analyse et certaines de ses caracteristiques auront 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 l'horodatage utilise sera celui du fichier pointe par le lien symbolique. Cela 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 autorisees comprennent exec Afficher des informations de diagnostic liees a -exec, -execdir, -ok et -okdir 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. search Naviguer dans l'arborescence du repertoire de maniere bavarde. stat Afficher des messages des que des fichiers sont examines a l'aide des appels systeme stat et lstat. Le programme find tente de limiter ce type d'appels. tree Afficher l'arbre de l'expression dans sa forme d'origine et sa forme optimisee. all Activer toutes les autres options de debogage (sauf help). help Decrire les options de debogage. -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 bord. 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) 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 exigent des informations stockees dans l'inoeud. Sur de nombreuses 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. Si vous utilisez le predicat -fstype TOTO et si vous specifiez un type de systeme de fichiers TOTO non connu (a savoir present dans /etc/mtab), au moment du demarrage de find, ce predicat est equivalent a -false. 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 La partie de la ligne de commande apres la liste des points de depart est l'expression. C'est une sorte de specification de requete decrivant ce a quoi correspondent les fichiers et ce qu'on fait avec les fichiers trouves. Une expression se compose d'une sequence de choses : Tests Tests renvoie une valeur vrai ou faux, habituellement a partir d'une propriete d'un fichier en question. Par exemple, le test -empty n'est vrai que lorsque le fichier courant est vide. Actions Les actions ont des effets de bord (tels que l'affichage de quelque chose sur la sortie standard) et renvoient vrai ou faux selon leur reussite. Par exemple, l'action -print affiche le nom du fichier courant sur la sortie standard. Options globales Les options globales modifient la realisation de tests et d'actions specifiees n'importe ou sur la ligne de commande. Les options globales renvoient toujours vrai. Par exemple, l'option -depth amene find a traverser le systeme de fichiers par ordre de profondeur. Options de position Les options de position ne modifient que les tests ou les actions qui les suivent. Les options de position renvoient toujours vrai. Par exemple, l'option -regextype est une option de position qui specifie le dialecte de l'expression reguliere intervenant plus tard sur la ligne de commande. Operateurs Les operateurs sont ajoutes aux autres elements dans une expression. On y trouve par exemple -o (pour l'option logique OU) et -a (pour l'option logique ET). -a est suppose quand aucun operateur n'est specifie. L'action -print s'effectue sur tous les fichiers pour lesquels l'expression entiere est vrai, sauf si elle contient une autre action que -prune ou -quit. Les actions qui desactivent le -print par defaut sont -delete, -exec, -execdir, -ok, -okdir, -fls, -fprint, -fprintf, -ls, -print et -printf. L'action -delete agit aussi comme une option (puisqu'elle implique -depth). OPTIONS DE POSITION Les options de position renvoient toujours vrai. Elles ne concernent que les tests qui apparaissent ensuite sur la ligne de commande. -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. -follow Obsolete, utilisez plutot l'option -L a la place. Dereference les liens symboliques. Cela 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 qu'au lien lui-meme. Les predicats -lname et -ilname renvoient toujours faux lorsqu'on utilise -follow. -regextype type Definir la syntaxe de l'expression rationnelle des tests -regex et -iregex qui seront indiques plus loin sur la ligne de commande. Pour voir les types d'expression reguliere connus, utilisez -regextype help. La documentation de Texinfo (voir VOIR AUSSI) explique la signification et les differences entre les differents types d'expression reguliere. -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. Si un message d'avertissement est produit concernant l'utilisation de la ligne de commande, l'etat de sortie de find n'est pas affecte. Si la variable d'environnement POSIXLY_CORRECT est definie et si -warn est utilise, rien ne dit quels messages d'avertissement seront actifs s'il y en a. OPTIONS GLOBALES Les options globales renvoient toujours vrai. Les options globales prennent effet meme pour les tests intervenant plus tot sur la ligne de commande. Pour eviter toute confusion, les options globales devraient etre specifiees sur la ligne de commande apres la liste des points de depart, juste avant le premier test, une option de position ou une action. Si vous specifiez une option globale ailleurs, find produira un message d'avertissement pour dire que cela peut entrainer des confusions. Les options globales interviennent apres la liste des points de depart, elles sont d'un autre type que des options comme -L. -d Un synonyme de -depth, dans un but de compatibilite avec FreeBSD, NetBSD, MacOS X et OpenBSD. -depth Traiter d'abord les sous-repertoires avant le repertoire lui-meme. L'action -delete implique aussi -depth. -files0-from fichier Lire les points de depart a partir de fichier au lieu de l'obtenir sur la ligne de commande. Contrairement aux limites connues de passer des points de depart au moyen d'arguments sur la ligne de commande, a savoir la limitation du nombre de noms de fichier, et l'ambiguite inherente de noms de fichiers en conflit avec des noms d'option, l'utilisation de cette option permet des passer sans risque un nombre arbitraire de points de depart a find. Utiliser cette option et passer les points de depart en ligne de commande s'exluent mutuellement et cela n'est donc pas permis en meme temps. L'argument fichier est obligatoire. Il est possible d'utiliser -files0-from - pour lire la liste des points de depart a partir du flux de l'entree standard, et par exemple d'un tube. Dans ce cas, les actions -ok et -okdir ne sont pas permises parce qu'elles interfereraient de facon evidente avec la lecture a partir de l'entree standard afin d'obtenir une confirmation de l'utilisateur. Les points de depart dans fichier doivent etre separes par des caracteres ASCII NULL. Deux caracteres NULL successifs, par exemple un point de depart avec un nom de fichier de longueur nulle ne sont pas permis et meneront a une erreur de diagnostic suivie d'un code d'erreur different de zero. Dans le cas ou le fichier donne en argument est vide, find ne traite aucun point de depart et donc quittera immediatement apres l'analyse des arguments du programme. C'est different de l'invocation standard ou find considere le repertoire actuel comme point de depart si aucun argument de chemin n'est passe. Sinon, le traitement des points de depart est comme d'habitude, par exemple find parcourra de facon recursive les sous-repertoires sauf indication contraire. Pour ne traiter que les points de depart, il est possible de passer l'argument -maxdepth 0 en plus. Remarques supplementaires : si un fichier est liste plus d'une fois dans le fichier d'entree, il n'est pas precise s'il est visite plus d'une fois. Si le fichier est deplace pendant le fonctionnement de find, le resultat n'est pas precise non plus. Enfin, la position de la recherche a l'interieur du fichier nomme au moment ou find quitte, que se soit avec la commande quit ou de n'importe quelle maniere, n'est pas non plus precisee. Par << non precise >>, on entend ici que cela peut fonctionner ou non, ou faire quelque chose de particulier et que le comportement peut changer d'une plateforme a l'autre ou selon la version de findutils. -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). De plus, find avec l'option -ignore_readdir_race ignorera les erreurs de l'action -delete si le fichier a disparu depuis la lecture du repertoire parent : il n'affichera pas d'erreur et le code de retour de l'action -delete sera vrai. -maxdepth n Descendre au plus a n niveaux de profondeur des repertoires (n etant un entier positif ou nul) sous le point de depart. -maxdepth 0 signifie de n'appliquer les tests et les actions qu'aux points de depart eux-memes. -mindepth n Ne pas appliquer les tests ou les actions a des niveaux de profondeur inferieurs a n (un entier non negatif). n est un entier positif ou nul. -mindepth 1 signifie que les tests et les actions s'appliquent a tous les fichiers sauf aux points de depart. -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 assumant que les repertoires contiennent 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 declare deux sous-repertoires de moins que le nombre de liens au repertoire, il sait que le reste des entrees dans le repertoire ne sont pas des 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. -version, --version Afficher le numero de version de find et quitter. -xdev Ne pas parcourir les repertoires situes sur d'autres systemes de fichiers. TESTS Quelques tests (comme -newerXY et -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. Un parametre numerique n peut etre passe aux tests (comme -amin, -mtime, -gid, -inum, -links, -size, -uid et -used) ainsi +n superieur a n, -n inferieur a n, n strictement egal a n. Tests pris en charge : -amin n Dernier acces au fichier il y a plus de, moins de ou precisement n minutes. -anewer reference La date du dernier acces au fichier actuel est plus recente que la derniere modification du fichier reference. Si reference est un lien symbolique et que les options -H ou -L sont actives, c'est toujours la date de derniere modification du fichier pointe qui est utilisee. -atime n Dernier acces au fichier il y a plus de, moins de ou precisement n*24 heures. Lorsque find calcule le nombre de periodes de 24 heures depuis lequel il y a eu un acces au fichier, la partie fractionnelle est ignoree. Ainsi, pour correspondre a -atime +1, il faut qu'un acces au fichier ait eu lieu il y a au moins deux jours. -cmin n Date de derniere modification de l'etat du fichier il y a plus de, moins de ou precisement n minutes. -cnewer reference La date de derniere modification de l'etat du fichier est plus recente que la date de derniere modification du fichier reference donne. Si le fichier reference donne est un lien symbolique et que les options -H ou -L sont actives, alors c'est la date de derniere modification de l'etat du fichier pointe par le lien qui est consideree. -ctime n Date de derniere modification de l'etat du fichier il y a plus de, moins de ou precisement n*24 heures. Consultez l'explication concernant -atime pour comprendre comment l'effet d'arrondi altere l'interpretation de la date de derniere modification de l'etat du fichier. -empty Fichier vide. De plus, ce fichier doit etre un fichier normal ou 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 autorises 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 dont le GID numerique vaut plus de, moins de ou precisement 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. Le motif << toto >> correspond aussi a un fichier nomme << totobidule >>. -inum n Fichier dont le numero d'inoeud est inferieur a, superieur a ou egal a n. Il est en general plus facile d'utiliser le test -samefile. -ipath motif Semblable a -path, mais sans differencier les majuscules et les minuscules. -iregex motif Semblable a -regex, mais sans differencier les majuscules et les minuscules. -iwholename motif Voir -ipath. Cette option est moins portable que -ipath. -links n Fichier ayant moins de, plus de ou precisement n liens physiques. -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 plus de, moins de ou precisement n minutes. -mtime n Fichier dont les donnees ont ete modifiees il y a moins de, plus de ou precisement n*24 heures. Consultez l'explication sur -atime pour comprendre comment les arrondis affectent l'interpretation des dates de modification des fichiers. -name motif Fichier dont le nom de base (chemin sans le repertoire parent) correspond au motif du shell. Les repertoires parent etant supprimes, les noms de fichier englobes dans une recherche avec -name n'incluront jamais de barre oblique, donc << -name a/b >> ne trouvera rien (vous devrez probablement utiliser plutot -path). Un avertissement apparait si vous essayez de le faire, sauf si la variable d'environnement POSIXLY_CORRECT est definie. 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 ci-dessous). Pour ignorer un repertoire, ainsi que tous ses fichiers, utilisez l'option -prune plutot que de verifier chaque fichier de l'arbre (vous trouverez un exemple dans la description de cette action). 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 des guillemets afin d'eviter le developpement des metacaracteres par l'interpreteur de commandes. -newer reference La date de la derniere modification du fichier courant est plus recente que celle du fichier reference indique. Si le fichier reference 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 reference Reussit si l'horodatage X d'un fichier est plus recent que celui Y d'un fichier reference. Les lettres X et Y peuvent etre une des suivantes : a La date et l'heure de dernier acces au fichier reference B La date et l'heure de creation du fichier reference c La date et l'heure de changement d'etat de l'inoeud reference m La date et l'heure de derniere modification du fichier reference t reference est directement interpretee en tant qu'heure Certaines combinaisons ne sont pas valables, comme X utilise avec t. Certaines combinaisons ne sont pas implementees sur certains systemes, comme B qui n'est pas pris en charge par tous les systemes. Une erreur fatale sera renvoyee 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 de 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 une entree pour un repertoire nomme ./src/misc (s'il en existe un). Pour ignorer toute une arborescence, utilisez -prune au lieu de verifier chaque fichier d'une arborescence. Remarquez que le test de correspondance de motif s'applique a tout le nom du fichier en commencant par un des points de depart designe sur la ligne de commande. Ici, utiliser un chemin absolu n'aurait de sens que si le point de depart en question est aussi un chemin absolu. Cela veut dire que cette commande ne correspondra jamais : find bidule -path /truc/bidule/monFichier -print find compare l'argument -path a la concatenation du nom du repertoire et le nom de base du fichier en cours d'examen. La concatenation ne se terminant jamais par une barre oblique, les arguments -path qui se terminent par ce signe ne trouveront rien (sauf peut-etre un point de depart specifie sur la ligne de commande). Le predicat -path est egalement pris en charge par HP-UX find et fait partie du standard POSIX 2008. -perm mode Fichier dont les bits d'autorisations sont fixes exactement au mode indique (en notation symbolique ou octale). Puisqu'une correspondance stricte est requise, si vous voulez utiliser cette forme de modes symboliques, vous risquez d'etre oblige d'utiliser une chaine de caracteres plutot compliquee. Par exemple, -perm g=w 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 coherent avec le comportement de perm -000). -perm +mode Cela n'est plus pris en charge (et obsolete depuis 2005). Utilisez plutot -perm /mode. -readable Correspond aux fichiers qui sont accessibles en lecture par l'utilisateur actuel. 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 pas 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 (excepte que << . >> correspond avec retour ligne). L'option -regextype permet d'en changer. -samefile nom Fichier qui se refere au meme inoeud que nom. Quand -L est actif, cela inclut les liens symboliques. -size n[cwbkMG] Fichier utilisant moins de, plus de ou precisement n unites d'espace arrondi au nombre superieur. 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 kilooctets informatiques (KiO, unites de 1024 octets) << M >> Pour des megaoctets informatiques (MiO, unites de 1024 * 1024 = 1048576 octets) << G >> pour des gigaoctets informatiques (GiO, unites de 1024 * 1024 * 1024 = 1073741824 octets) La taille est simplement le membre st_size de struct stat remplie par l'appel systeme lstat (ou stat), arrondie a l'unite superieure comme decrit ci-dessus. En d'autres termes, il est coherent avec le resultat de ls -l. Souvenez-vous que les specificateurs de format << %k >> et << %b >> de -printf gerent differemment les fichiers creux. Le suffixe << b >> decompte toujours des blocs de 512 octets, jamais de 1024 octets, contrairement au comportement de -ls. Les prefixes + et - signifient, comme d'habitude, plus grand que et plus petit que ; ainsi une taille exacte de n unites ne correspond pas. Retenez que la taille est arrondie a l'unite superieure. Donc -size -1M n'equivaut pas a -size -1048576c. Le premier ne correspond qu'a des fichiers vides, le second a des fichiers pesant entre 0 et 1 048 575 octets. -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 directory p Tube nomme (FIFO) f fichier normal 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) Pour rechercher plus d'un type a la fois, vous pouvez fournir une liste combinee de lettres de types separees par une virgule << , >> (extension GNU). -uid n Fichier dont l'identifiant utilisateur numerique vaut plus de, moins de ou precisement n. -used n Fichier dont le dernier acces date de plus de, moins de ou precisement n jours apres la date de sa 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 par l'utilisateur actuel. 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), etant donne que de nombreux systemes implementent access(2) au niveau du noyau 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. -context motif (SELinux seulement) le contexte de securite du fichier correspond au motif global. ACTIONS -delete Effacer les fichiers ou les repertoires et renvoyer vrai si l'effacement a reussi. Si l'effacement echoue, un message d'erreur est envoye et le code de retour de find sera different de zero (quand finalement il s'interrompt). Attention : N'oubliez pas que find evalue la ligne de commande comme une expression. Aussi placer -delete en premier fera que find essaiera de detruire tout ce qu'il trouvera sous le point de depart specifie. L'utilisation de l'action -delete en ligne de commande active automatiquement l'option -depth. Comme a son tour -depth rend -prune inefficace, l'action -delete ne peut pas etre combinee de facon utile avec -prune. Souvent, l'utilisateur voudrait tester une recherche en ligne de commande avec -print avant d'ajouter -delete a l'execution reelle de la suppression. Pour eviter des resultats surprenants, il est habituellement preferable de ne pas oublier d'utiliser -depth explicitement pendant l'execution prealable de ces tests. L'action -delete echouera aussi a supprimer un repertoire a moins qu'il ne soit vide. Avec l'option -ignore_readdir_race, find ignorera les erreurs de l'action -delete si le fichier a disparu depuis que le repertoire parent a ete lu : il n'affichera pas de diagnostic d'erreur, ne changera pas le code d'erreur a une valeur differente de zero, et le code de retour de l'action -delete sera vrai. -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, cela 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 l'interpreteur, 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 les fichiers selectionnes, mais en ajoutant le nom de chaque fichier trouve a la fin de la ligne de commande. Le nombre total d'invocations 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 et elle doit apparaitre a la fin et immediatement avant le << + >> ; elle doit etre echappee (avec un << \ >>) ou entre guillemets pour la proteger d'une interpretation par les interpreteurs. La commande sera executee dans le repertoire de depart. Si une invocation avec la forme << + >> renvoie une valeur differente de zero comme code de retour, alors find renvoie un code de retour different de zero. Si find rencontre une erreur, cela peut parfois provoquer une fin immediate, aussi certaines commandes en attente pourraient ne pas etre executees. C'est pourquoi -exec ma_commande ... {} \+ -quit peut n'aboutir a aucune execution de ma_commande. Cette variante de -exec renvoie toujours vrai. -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. Comme avec -exec, {} devrait etre entoure de guillemets si find est appele depuis un interpreteur. 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, mais chaque invocation de commande ne portera que sur une liste de fichiers issus 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. Si une invocation avec la forme << + >> renvoie un etat de sortie autre que zero, find renvoie un etat de sortie qui n'est pas zero. Si find rencontre une erreur, il peut quitter immediatement, donc des commandes en attente ne seront pas lancees. Le resultat de l'action varie selon que vous utilisez la variante + ou ; ; -execdir commande {} + renvoie toujours vrai alors que -execdir commande {} ; ne renvoie vrai que si commande renvoie 0. -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 acquiesce, la commande est lancee. Sinon, le test devient faux. Si la commande est lancee, son entree standard est redirigee depuis /dev/null. Cette action ne peut etre indiquee en meme temps que l'option -files0-from. La reponse a l'invite de commande 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 etendus et classes d'equivalence). -okdir commande ; Comme -execdir, mais interroger d'abord l'utilisateur comme dans le cas de -ok. Si l'utilisateur n'acquiesce pas, le test renvoie faux. Si la commande est lancee, son entree standard est redirigee depuis /dev/null. Cette action ne peut etre indiquee en meme temps que l'option -files0-from. -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 octet NULL (a la place du caractere saut de ligne que -print utilise). Cela 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 sur la sortie standard, en interpretant les sequences d'echappement << \ >> et les directives << % >>. La largeur et la precision des champs peuvent etre specifiees 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 attendez. 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 nouvelle 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(3). Les valeurs possibles de k sont indiquees ci-dessous. Veuillez vous reporter a la documentation de strftime(3) pour la liste complete. Certains caracteres de specification de conversion pourraient ne pas etre disponibles sur tous les systemes, a cause des differences entre les fonctions strftime(3) 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). Une partie est fractionnee. T Heure au format 24 heures (hh:mm:ss.xxxxxxxxxx) + La date et l'heure, separees par un << + >>, << 2004-04-28+22:22:05 >> par exemple. C'est une extension GNU. L'heure est donnee dans la zone horaire courante (qui peut etre modifiee a l'aide de la variable d'environnement TZ). Le second champ contient une partie decimale. X Representation locale de l'heure (H:M:S). Le champ secondes comprend une partie fractionnee. 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) F date (mm/jj/aaaa) h Identique a b j quantieme du jour dans 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 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). %Bk La date de << naissance >> du fichier, c'est-a-dire sa date de creation, au format specifie par k qui est le meme que pour %A. Cette directive produit une chaine vide si le systeme d'exploitation ou le systeme de fichiers sous-jacents ne gerent pas les dates de creation. %c Date de derniere modification d'etat du fichier, dans le format renvoye par la fonction C ctime(3). %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 de struct stat) exprime selon le systeme decimal. %f Afficher le nom de base ; le nom du fichier moins les repertoires superieurs (uniquement le dernier element). Pour << / >>, le resultat est << / >>. Voir la section EXEMPLES pour un exemple. %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 Nom de repertoire ; 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 se developpera en << . >>. Pour les fichiers etant eux-memes des repertoires et contenant une barre oblique (y compris / ), %h se developpe en une chaine vide. Voir la section EXEMPLES pour un exemple. %H Point de depart a partir duquel le fichier a ete trouve. %i Numero d'inode du fichier (selon le systeme decimal). %k Taille de l'espace disque utilise par un 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 creux. %l Destination du lien symbolique (vide si le fichier n'est pas un lien symbolique). %m Bits d'autorisation d'acces au fichier (en systeme 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 fichier 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, sans le nom du point de depart sous lequel il 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 ordinaire 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. En general, le nombre de blocs utilises par un fichier depend du systeme de fichiers. 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'offrent 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(3). %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 des liens symboliques : << L >>=boucle, << N >>=inexistant, << ? >> pour toute autre erreur au moment de la determination du type de la cible du lien symbolique. %Z (SELinux seulement) Le contexte de securite du fichier. %{ %[ %( Reserve pour une utilisation future. 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 y descendre. Si -depth est donne, alors -prune est sans effet. Parce que -delete implique -depth, vous ne pouvez pas utiliser utilement a la fois -prune et -delete. Par exemple, pour sauter le repertoire src/emacs et tous les fichiers et repertoires en dessous, et afficher les noms des autres fichiers trouves, faites quelque chose comme ceci : find . -path ./src/emacs -prune -o -print -quit Quitter immediatement (avec le code de retour zero s'il n'y a eu aucune erreur). C'est different de -prune, car -prune ne s'applique qu'au contenu des repertoires coupes, tandis que -quit arrete simplement find immediatement. Aucune execution de processus enfant ne sera poursuivie. Toute ligne de commande construite par -exec ... + ou -execdir ... + sera appelee avant que le programme ne quitte. Apres -quit, plus aucun fichier indique sur la ligne de commande ne sera traite. Par exemple, << find /tmp/toto /tmp/machin -print -quit >> n'affichera que << /tmp/toto >>. Une utilisation classique de -quit consiste a arreter l'examen du systeme de fichiers des qu'on a trouve ce qu'on cherche. Par exemple, si on veut chercher un seul fichier, on peut faire cela : find / -name needle -print -quit OPERATEURS Dans l'ordre de priorite decroissante : ( expr ) Forcer la priorite. Comme les parentheses risquent d'etre interpretees par le shell, vous devriez normalement les proteger. De nombreux exemples de cette page de manuel utilisent 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 prises pour etre jointes par un -a implique ; expr2 n'est pas evalue si expr1 est faux. 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. Veuillez remarquer le -a, quand il est specifie implicitement (par exemple par deux tests sans operateur explicite entre eux) ou explicitement, a une plus haute priorite que -o. Cela signifie que find . -name fichier1 -o -name fichier2 -print n'affichera jamais fichier1. 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 Afficher 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 utilisant une protection octale. 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 espace 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. CONFORMITE AUX STANDARDS Vous devriez definir 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-2008, Edition 2016) : -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 compter de findutils-4.2.2, les metacaracteres du shell (<< * >>, << ? >> ou << [] >> par exemple) trouveront les fichiers commencant par << . >>, car l'interpretation 126 d'IEEE PASC l'impose. Cela differe des versions precedentes de findutils. -type Geree. POSIX stipule << b >>, << c >>, << d >>, << l >>, << p >>, << f >> et << s >>. GNU find gere aussi << D >>, representant un Door, pour les systemes d'exploitation qui le fournissent. En outre, GNU find permet de specifier plusieurs types a la fois dans une liste separee par des virgules. -ok Geree. L'interpretation de la reponse est soumise aux motifs << oui >> ou << non >> selectionnes 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. Cela est different du comportement precedent, qui utilisait l'horodatage correspondant 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 retro-compatibilite. Autres primaires 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 logiques AND/OR, -a et -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 de GNU find. 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 parent sera souvent inferieur a celui attendu. Cela peut etre du au fait que GNU find optimise l'acces en evitant de parcourir un sous-repertoire qui s'avere etre un lien vers un repertoire parent. 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 a POSIX. Le positionnement de la variable d'environnement POSIXLY_CORRECT ne modifie pas le comportement des tests -regex ou -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 GNU find 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 crochets 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 PEU COURANTS. 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 la sortie d'erreur doivent etre des messages de diagnostic et ne doivent etre generes que dans le cas d'une sortie avec un etat different de zero. Lorsque POSIXLY_CORRECT n'est pas defini, -perm +zzz est gere de la meme facon que -perm /zzz, lorsque +zzz n'est pas un mode symbolique valable. Lorsque POSIXLY_CORRECT est defini, 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 Approche simple de << find|xargs >> - Rechercher les fichiers nommes core dans le repertoire /tmp ou dans ses sous-repertoires, puis les effacer. $ find /tmp -name core -type f -print | xargs /bin/rm -f Remarquez que cela ne fonctionnera pas bien si des noms de fichiers comportent des retours a la ligne, des guillemets simples ou doubles ou des espaces. Approche plus sure de << find -print0 | xargs -0 >> - Chercher les fichiers qui s'appellent core 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 guillemets simples ou doubles, des espaces ou des retours a la ligne soient correctement traites. $ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f Le test -name est effectue avant celui -type afin d'eviter un appel stat(2) sur tous les fichiers. Remarquez qu'il y a toujours un conflit entre le moment ou find explore la hierarchie et affiche les noms de fichiers trouves et celui ou le processus execute par xargs agit sur le fichier. Traitement de points de depart arbitraires - Etant donne qu'un autre programme programme execute un pre-filtre et cree une enorme liste de fichiers separes par des caracteres NULL, les traiter comme points de depart et trouver tous les fichiers normaux parmi eux : $ proggy | find -files0-from - -maxdepth 0 -type f -empty L'utilisation de -files0-from - signifie lire les noms des points de depart a partir de l'entree standard, c'est-a-dire par exemple d'un tube, et -maxdepth 0 assure que seules ces entrees explicitement designees seront examinees sans parcours recursif dans les repertoires (au cas ou une des points de depart est un repertoire). Executer une commande pour chaque fichier - Executer fichier sur chaque fichier du repertoire actuel ou de ses sous-repertoires. $ find . -type f -exec fichier '{}' \; Remarquez que les accolades sont entourees par des guillemets afin d'empecher leur interpretation en tant que ponctuation du script d'interpreteur. De la meme facon, le point-virgule est protege grace a une barre oblique inverse, bien que l'apostrophe aurait aussi pu etre utilisee dans ce cas. Dans de nombreux cas, on pourrait preferer la syntaxe `-exec ... +`, voire meme `-execdir ... +`, pour des raisons de performance et de securite. Explorer une fois le systeme de fichiers - pour deux actions differentes - 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 / \ \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \ \( -size +100M -fprintf /root/grand.txt '%-10s %p\n' \) Cet exemple utilise le caractere de suite de ligne '\' sur les deux premieres lignes pour demander a l'interpreteur de continuer a lire la commande sur la ligne suivante. Rechercher des fichiers par leur age - Rechercher les fichiers dans votre dossier personnel qui ont ete modifies pendant les dernieres vingt-quatre heures. $ find $HOME -mtime 0 Cette commande s'exprime de cette facon parce que la date de derniere modification de chaque fichier est decoupee en tranche de 24 heures et le reliquat est elimine. Cela veut dire que pour correspondre a -mtime 0, un fichier doit avoir une anteriorite de modification inferieure a 24 heures. Rechercher les fichiers par leurs permissions - Rechercher les fichiers qui offrent le droit d'execution, mais qui ne sont pas lisibles. $ find /sbin /usr/sbin -executable \! -readable -print - 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. $ find . -perm 664 Les fichiers qui satisfont ces criteres, mais qui ont d'autres bits de permissions actives (par exemple si le fichier est executable par quelqu'un) ne seront pas selectionnes. - 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). $ find . -perm -664 Cela trouvera un fichier dont le mode est, par exemple, 0777. - Rechercher les fichiers qui offrent le droit d'ecriture a quelqu'un (son proprietaire ou son groupe, ou bien n'importe qui). $ find . -perm /222 - Rechercher les fichiers qui offrent le droit d'ecriture a leur proprietaire ou a leur groupe. $ 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 fichiers n'ont pas a offrir a la fois le droit d'ecriture au proprietaire et au groupe, l'un ou l'autre suffira. - Rechercher les fichiers qui offrent le droit d'ecriture a leur proprietaire et a leur groupe. $ find . -perm -220 $ find . -perm -g+w,u+w Ces deux commandes font la meme chose. - Une recherche plus elaboree a partir des permissions. $ find . -perm -444 -perm /222 \! -perm /111 $ find . -perm -a+r -perm /a+w \! -perm /a+x Ces commandes recherchent toutes les 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). Decouper - omettre des fichiers et des sous-repertoires - Copier le contenu de repertoire-source dans repertoire-cible, en omettant les fichiers ou les repertoires nommes .snapshot (et tout ce qu'ils contiennent). Cela omet aussi les fichiers ou les repertoires dont le nom se termine par << ~ >>, mais pas les autres contenus. $ cd /repertoire-source $ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \ | cpio -pmd0 /dest-dir La structure -prune -o \( ... -print0 \) est tres 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, leur contenu n'est donc pas pertinent). 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. - 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 : $ find repo/ \ \( -exec test -d '{}/.svn' \; \ -or -exec test -d '{}/.git' \; \ -or -exec test -d '{}/CVS' \; \ \) -print -prune Exemple de sortie : 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. Autres exemples utiles - Rechercher plusieurs types de fichiers. $ find /tmp -type f,d,l Rechercher des fichiers, des repertoires et des liens symboliques dans le repertoire /tmp en passant ces types sous forme de liste separee par des virgules (extension GNU), ce qui est equivalent a la commande plus longue mais plus portable : $ find /tmp \( -type f -o -type d -o -type l \) - Rechercher les fichiers du nom particulier needle et arreter immediatement des qu'on trouve le premier. $ find / -name needle -print -quit - Demonstration de l'interpretation des directives de format %f et %h de l'action -printf dans certains cas de niche. Voici un exemple comprenant une sortie. $ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n' [.][.] [.][..] [][/] [][tmp] [/tmp][TRACE] [.][compile] [compile/64/tests][find] CODE 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. Quand une erreur se produit, find peut s'arreter immediatement sans terminer les actions specifiees. Par exemple, il se peut que certains points de depart ne soient pas examines ou que des appels en attente de programmes par -exec ... {} + ou -execdir ... {} + ne se fassent pas. HISTORIQUE A partir de findutils-4.2.2, les metacaracteres de l'interpreteur (<< * >>, << ? >> ou << [] >> par exemple) utilises dans les motifs des noms de fichier trouveront les fichiers commencant par << . >> parce que l'interpretation 126 d'IEEE POSIX l'impose. A partir de findutils-4.3.3, -perm /000 explore maintenant tous les fichiers plutot qu'aucun. La gestion des nanosecondes dans les horodatages 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, a partir de findutils-4.3.11. Toutefois, find ne s'interrompra pas immediatement. Dans les versions precedentes, l'etat de sortie de find n'etait pas modifie par l'echec de -delete. Fonctionnalites Ajoutees Se passe aussi dans -files0-from 4.9.0 -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 La syntaxe -perm +MODE a ete supprimee dans findutils-4.5.12, pour -perm //MODE. La syntaxe +MODE etait obsolete depuis findutils-4.2.21 qui a ete publie en 2005. FAUX BOGUES Surprises avec la precedence d'un operateur La commande find . -name fichier1 -o -name fichier2 -print n'affichera jamais fichier1, car elle revient en fait a find . -name fichier1 -o \( -name fichier2 -a -print \). Rappelez-vous que la precedence de -a est superieure a celle de -o et quand aucun operateur n'est specifie entre les tests, -a est presume. Message d'erreur "paths must precede expression" $ find . -name *.c -print find: paths must precede expression find: possible unquoted pattern after predicate `-name'? Cela arrive quand l'interpreteur pourrait developper le motif *.c a plus d'un nom de fichier existant dans le repertoire actuel et le passage des noms de fichier qui en resultent a la ligne de commande find devient : find . -name frcode.c locate.c word_io.c -print Cette commande ne va bien entendu pas fonctionner, car le predicat -name ne permet exactement qu'un motif en argument. Plutot que de faire comme ca, vous devriez encapsuler le motif entre des guillemets ou echapper les jokers, permettant ainsi a find d'utiliser le motif avec le joker lors de la recherche d'un nom de fichier correspondant, au lieu des noms de fichier developpes par l'interpreteur parent : $ find . -name '*.c' -print $ find . -name \*.c -print BOGUES Des problemes de securite se posent, inherents au comportement de find tel que defini par le standard POSIX, et qui ne peuvent donc etre resolus. Par exemple, l'action -exec est dangereuse par nature et l'utilisation de -execdir est preferable. La variable d'environnement LC_COLLATE n'a aucun effet sur l'action -ok. SIGNALER DES BOGUES Aide en ligne de GNU coreutils : Signaler toute erreur de traduction a Signaler toute autre erreur au moyen du systeme de suivi de bogues GNU Savannah : Les sujets generaux concernant le paquet GNU findutils sont discutes sur la liste de diffusion bug-findutils : COPYRIGHT Copyright (C) 1990-2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 ou superieure . Ce programme est un logiciel libre. Vous pouvez le modifier et le redistribuer. Il n'y a AUCUNE GARANTIE dans la mesure autorisee par la loi. VOIR AUSSI chmod(1), locate(1), ls(1), updatedb(1), xargs(1), lstat(2), stat(2), ctime(3) fnmatch(3), printf(3), strftime(3), locatedb(5), regex(7) Documentation complete : aussi disponible localement a l'aide de : info find TRADUCTION La traduction francaise de cette page de manuel a ete creee par Florentin Duneau , Jean-Luc Coulon (f5ibh) , Sylvain Cherrier , Nicolas Francois , Jean-Philippe MENGUAL et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . FIND(1)