FIND(1)

NOM
find - Rechercher des fichiers dans une hiérarchie de répertoires

SYNOPSIS
find [-H] [-L] [-P] [-D options_débogage] [-Oniveau] [point-départ...] [expression]

DESCRIPTION
Cette page de manuel documente la version GNU de find. GNU find parcourt les arborescences des répertoires ayant pour racine chaque point de départ donné en évaluant l'expression de gauche à droite, en suivant les règles de priorité décrites dans la section OPÉRATEURS, jusqu'à l'obtention du résultat (par exemple la partie gauche est fausse pour un opérateur et, vraie pour un opérateur ou), puis find passe au nom de fichier suivant. Si aucun point de départ n'est spécifié, « . » est présumé.

Si vous utilisez find dans un environnement dans lequel la sécurité est importante (si vous l'utilisez par exemple pour faire des recherches dans des répertoires qui sont accessibles en écriture à 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 détails et d'explications que cette page de manuel, et peut donc être considérée comme une source d'informations plus utile.

OPTIONS
Les options -H, -L et -P contrôlent le traitement des liens symboliques. Les paramètres de la ligne de commande qui les suivent sont considérés comme des fichiers ou des répertoires à examiner, et ce jusqu'au premier paramètre qui commence par « - », « ( » ou « ! ». Ce paramètre, et tous ceux qui suivent, sont considérés comme décrivant ce qui doit être recherché. Si aucun chemin n'est précisé, c'est le répertoire courant qui est utilisé. Si aucune expression n'est donnée, c'est l'expression -print qui est utilisée (quoi qu'il en soit, vous devriez plutôt utiliser -print0).

Cette page de manuel décrit les « options » contenues dans la liste d'expressions. Ces options contrôlent le comportement de find mais sont indiquées immédiatement après le dernier chemin. Les cinq options « réelles » -H, -L, -P, -D et -O doivent être saisies avant le premier chemin, le cas échéant. Un double tiret -- pourra être utilisé afin d'indiquer que les arguments restants ne sont pas des options, mais cela ne fonctionne pas vraiment vu la manière dont find détermine la fin de la suite de paramètres de chemin : il le fait en lisant jusqu'à ce qu'un paramètre d'expression n'arrive (qui commence aussi par un « - »). Maintenant, si un paramètre de chemin commence par un « - », find le traiterait plutôt comme un paramètre d'expression. Ainsi, pour s'assurer que tous les points de départ sont considérés comme tels, et surtout pour empêcher que des motifs de joker étendus par l'interpréteur appelant ne soient malencontreusement traités comme des paramètres d'expression, il est en général plus sûr de faire commencer les chemins de recherche douteux ou les jokers par « ./ » ou d'utiliser un chemin absolu commençant par un « / ».

-P  Ne jamais suivre les liens symboliques. C'est le comportement par défaut. Quand find analyse ou affiche les informations concernant des fichiers, et quand le fichier est un lien symbolique, les informations utilisées sont celles qui concernent les propriétés du lien symbolique lui-même.

-L  Suivre les liens symboliques. Quand find analyse ou affiche les informations concernant un fichier, ce sont celles extraites des caractéristiques du fichier vers lequel mène les liens, et non celle du lien lui-même (sauf s'il s'agit d'un lien cassé, 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 ultérieures de l'option -P. Si l'option -L est active et que find découvre un lien symbolique vers un sous-répertoire lors de ses recherches, le sous-répertoire pointé par le lien symbolique sera examiné.

    Quand l'option -L est active, le prédicat -type correspondra toujours au type du fichier pointé par le lien symbolique plutôt que celui du lien lui-même (sauf si le lien symbolique est cassé). Les actions qui peuvent casser des liens symboliques pendant l'exécution de find (par exemple -delete) peuvent aboutir à des comportements perturbants. L'utilisation de -L fait toujours renvoyer faux à -lname et -ilname.

-H  Do not follow symbolic links, except while processing the command line arguments. When find examines or prints information about files, the information used shall be taken from the properties of the symbolic link itself. The only exception to this behaviour is when a file specified on the command line is a symbolic link, and the link can be resolved. For that situation, the information used is taken from whatever the link points to (that is, the link is followed). The information about the link itself is used as a fallback if the file pointed to by the symbolic link cannot be examined. If -H is in effect and one of the paths specified on the command line is a symbolic link to a directory, the contents of that directory will be examined (though of course -maxdepth 0 would prevent this).

Si plus d'une option parmi -H, -L ou -P est indiquée, chacune écrase les précédentes, et c'est la dernière qui apparaît sur la ligne de commande qui prime sur les autres. Puisque c'est l'option par défaut, on considère que c'est -P qui est active, à moins que -H ou -L ne soient utilisées. La version find du GNU évalue souvent des fichiers pendant l'analyse de la ligne de commande, et ce avant qu'une recherche n'ait commencé. Ces options modifient aussi la façon dont les paramètres sont traités. Plus précisément, il existe un certain nombre de tests qui comparent les fichiers listés 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 été analysé et certaines de ses caractéristiques ont été mémorisées. Si le fichier indiqué est en fait un lien symbolique, et que l'option -P est active (ou que ni -H ni -L n'ont été précisées), alors l'information qui sera utilisée pour les comparaisons sera extraite des propriétés du lien symbolique. Sinon, elle sera extraite des propriétés du fichier pointé par le lien. Si find ne peut suivre le lien (soit parce ce qu'il ne dispose pas des privilèges suffisants, soit parce que le lien pointe vers un fichier inexistant), alors ce sont les propriétés du lien lui-même qui seront utilisées.

Quand les options -H ou -L sont actives, tout lien symbolique donné comme paramètre à -newer sera déréférencé, et l’horodatage utilisé sera celui du fichier pointé par le lien symbolique. Cela s'applique de la même façon à -newerXY, -anewer et -cnewer. L'option -follow a le même effet que -L, sauf qu'elle agit à l'endroit où elle apparaît (c'est-à-dire que si -L n'est pas utilisée et que -follow l'est, tout lien symbolique qui apparaît sur la ligne de commande après -follow sera déréférencé, et ceux apparaissant avant ne le seront pas).

-D options_débogage
    Print diagnostic information; this can be helpful to diagnose problems with why find is not doing what you want. The list of debug options should be comma separated. Compatibility of the debug options is not guaranteed between releases of findutils. For a complete list of valid debug options, see the output of find -D help. Valid debug options include

    exec
        Afficher des informations de diagnostic liées à -exec, -execdir, -ok et -okdir

    opt Afficher des informations de diagnostic liées à l'optimisation de l'arbre de l'expression (voir l'option -O).

    rates
        Afficher un résumé indiquant le nombre de succès ou d'échecs de chacun des prédicats.

    search
        Naviguer dans l'arborescence du répertoire de manière bavarde.

    stat
        Afficher des messages dès que des fichiers sont examinés à l’aide des appels système 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 optimisée.

    all Activer toutes les autres options de débogage (sauf help).

    help
        Décrire les options de débogage.

-Oniveau
    Activer l'optimisation des requêtes. Le programme find réorganise l'ordre des tests afin d'en accélérer l'exécution tout en préservant le résultat exact, c'est-à-dire en évitant de modifier ceux qui ont des effets de bord. Les optimisations réalisées à chacun des niveaux sont les suivantes.

    0   Équivalent au niveau 1 d'optimisation.

    1   Niveau d'optimisation par défaut. Il correspond au comportement habituel. Les expressions sont réorganisées afin que les tests basés seulement sur les noms (comme -name ou -regex) soient exécutés en premier.

    2   Any -type or -xtype tests are performed after any tests based only on the names of files, but before any tests that require information from the inode. On many modern versions of Unix, file types are returned by readdir() and so these predicates are faster to evaluate than predicates which need to stat the file first. If you use the -fstype FOO predicate and specify a filesystem type FOO which is not known (that is, present in `/etc/mtab') at the time find starts, that predicate is equivalent to -false.

    3   Dans ce niveau d'optimisation, l'optimiseur de requêtes basé sur le coût total est activé. L'ordre des tests est modifié afin que les tests les moins coûteux (c'est-à-dire les plus rapides) soient exécutés en premier, et les plus coûteux exécutés plus tard, si besoin est. À l'intérieur d'un même niveau de coût, les prédicats sont évalués plus ou moins tôt selon leur probabilité de succès. Avec l'opérateur -o, les prédicats qui sont susceptibles de réussir sont évalués plus tôt, et avec l'opérateur -a, ce sont ceux qui risquent d'échouer qui sont évalués plus tôt.

    The cost-based optimiser has a fixed idea of how likely any given test is to succeed. In some cases the probability takes account of the specific nature of the test (for example, -type f is assumed to be more likely to succeed than -type c). The cost-based optimiser is currently being evaluated. If it does not actually improve the performance of find, it will be removed again. Conversely, optimisations that prove to be reliable, robust and effective may be enabled at lower optimisation levels over time. However, the default behaviour (i.e. optimisation level 1) will not be changed in the 4.3.x release series. The findutils test suite runs all the tests on find at each optimisation level and ensures that the result is the same.

EXPRESSIONS
La partie de la ligne de commande après la liste des points de départ est l'expression. C'est une sorte de spécification de demande décrivant ce à quoi correspondent les fichiers et ce qu'on fait avec les fichiers trouvés. Une expression se compose d'une séquence de choses :

Tests
    Tests renvoie une valeur vrai ou faux, habituellement à partir d'une propriété 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 réussite. Par exemple, l'action -print affiche le nom du fichier courant sur la sortie standard.

Options globales
    Les options globales modifient les opérations de test et d'action spécifiées n'importe où sur la ligne de commande. Les options globales renvoient toujours vrai. Par exemple, l'option -depth amène find à traverser le système 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 spécifie le dialecte de l'expression régulière intervenant plus tard sur la ligne de commande.

Opérateurs
    Les opérateurs sont ajoutés aux autres éléments dans une expression. On y trouve par exemple -o (pour l'option logique OU) et -a (pour l'option logique ET). -a est supposé quand aucun opérateur n'est spécifié.

L'action -print s'effectue sur tous les fichiers pour lesquels l'expression entière est vrai, sauf si elle contient une autre action que -prune ou -quit. Les actions qui désactivent le -print par défaut 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 début de la journée plutôt que depuis 24 heures. Cette option n'affecte que les tests qui sont indiqués plus loin sur la ligne de commande.

-follow
    Obsolète, utilisez plutôt l'option -L à la place. Déréférence les liens symboliques. Cela implique l'option -noleaf. L'option -follow n'affecte que les tests qui apparaissent après son apparition sur la ligne de commande. Sauf dans le cas où l'option -H ou -L est indiquée, la position de l'option -follow change le comportement du prédicat -newer, et tout fichier donné en paramètre de -newer sera déréférencé s'il s'agit d'un lien symbolique. La même remarque s'applique à -newerXY, -anewer et -cnewer. De la même façon, le prédicat -type correspondra toujours au type du fichier pointé par le lien symbolique plutôt qu’au lien lui-même. Les prédicats -lname et -ilname renvoient toujours faux lorsqu'on utilise -follow.

-regextype type
    Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the command line. To see which regular expression types are known, use -regextype help. The Texinfo documentation (see SEE ALSO) explains the meaning of and differences between the various types of regular expression.

-warn, -nowarn
    Activer ou désactiver les messages d'avertissement. Ces messages d'avertissement concernent l'usage de la ligne de commande, et non les événements que find peut rencontrer lorsqu'il explore les répertoires. Le comportement par défaut est d'activer -warn si l'entrée 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’état de sortie de find n'est pas affecté. Si la variable d'environnement POSIXLY_CORRECT est définie et si -warn est utilisé, 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 même pour les tests intervenant plus tôt sur la ligne de commande. Pour éviter toute confusion, les options globales devraient être spécifiées sur la ligne de commande après la liste des points de départ, juste avant le premier test, une option de position ou une action. Si vous spécifiez une option globale ailleurs, find produira un message d'avertissement pour dire que cela peut entraîner des confusions. Les options globales interviennent après la liste des points de départ, elles sont d'un autre type que des options comme -L.

-d  Un synonyme de -depth, dans un but de compatibilité avec FreeBSD, NetBSD, MacOS X et OpenBSD.

-depth
    Traiter d'abord les sous-répertoires avant le répertoire lui-même. L'action -delete implique aussi -depth.

-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 échoue lors de l'analyse d'un fichier. Si vous utilisez cette option et que le fichier est effacé entre le moment où find lit le nom du fichier dans le répertoire et celui où il essaye de l'analyser, vous n'obtiendrez aucun message d'erreur. Cela s'applique aussi aux fichiers et répertoires dont vous avez donné les noms sur la ligne de commande. Cette option prend effet dès le moment où la ligne de commande est lue, ce qui veut dire que vous ne pouvez pas rechercher sur une partie du système de fichiers avec cette option activée, et sur une autre partie avec cette option désactivée (si vous devez faire cela, vous utiliserez plutôt 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 répertoire parent : il n'affichera pas d'erreur et le code de retour de l'action -delete sera vrai.

-maxdepth n
    Descend at most levels (a non-negative integer) levels of directories below the starting-points. Using -maxdepth 0 means only apply the tests and actions to the starting-points themselves.

-mindepth n
    Do not apply any tests or actions at levels less than levels (a non-negative integer). Using -mindepth 1 means process all files except the starting-points.

-mount
    Ne pas parcourir les répertoires situés sur d'autres systèmes de fichiers. Il s'agit d'une alternative à l'option -xdev, assurant la compatibilité avec d'anciennes versions de find.

-noignore_readdir_race
    Désactiver l'effet de -ignore_readdir_race.

-noleaf
    Ne pas optimiser, en assumant que les répertoires contiennent deux sous-répertoires de moins que leur nombre de liens physiques. Cette option est nécessaire lorsque l'on parcourt des systèmes de fichiers ne suivant pas les conventions Unix concernant les liens de répertoires, comme les systèmes MS-DOS, les CD-ROM ou les points de montage de volumes AFS. Chaque répertoire sur un système de fichiers Unix dispose d'au moins deux liens physiques, son nom et « . ». De plus, chaque sous-répertoire a également un lien « .. » vers le répertoire parent (s'il existe). Quand find examine un répertoire, il sait qu'il y a deux sous-répertoires de moins que de liens vers le répertoire. Une fois qu'il a déclaré deux sous-répertoires de moins que le nombre de liens au répertoire, il sait que le reste des entrées dans le répertoire ne sont pas des répertoires. (Ces fichiers sont des feuilles ([NDT] « leaf ») dans l'arborescence des répertoires. S'il n'y a que les noms de fichiers à examiner, il n'a plus besoin de vérifier leur nature, ce qui entraîne une augmentation notable de la vitesse de traitement.

-version, --version
    Afficher le numéro de version de find et quitter.

-xdev
    Ne pas parcourir les répertoires situés sur d'autres systèmes de fichiers.

  TESTS
Quelques tests (comme -newerXYet -samefile par exemple) permettent de comparer le fichier en cours d'examen et un fichier de référence indiqué sur la ligne de commande. Quand ces tests sont utilisés, l'analyse du fichier de référence est soumis aux effets des options -H, -L, -P et tout -follow précédent. Par contre, ce fichier de référence n'est consulté qu'une fois, au moment où la ligne de commande est interprétée. Si ce fichier de référence ne peut pas être analysé (par exemple si l'appel système stat(2) échoue), un message d'erreur sera généré, et la commande find s'interrompra avec un statut différent de zéro.

Un paramètre numérique n peut être passé aux tests (comme -amin, -mtime, -gid, -inum, -links, -size, -uid et -used) ainsi

+n  supérieur à n,

-n  inférieur à n,

n   strictement égal à n.

Tests pris en charge :

-amin n
    Dernier accès au fichier il y a plus de, moins de ou précisément n minutes.

-anewer référence
    La date du dernier accès au fichier actuel est plus récente que la dernière modification du fichier référence. Si référence est un lien symbolique et que les options -H ou -L sont actives, c'est toujours la date de dernière modification du fichier pointé qui est utilisée.

-atime n
    File was last accessed less than, more than or exactly n*24 hours ago. When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.

-cmin n
    Date de dernière modification de l’état du fichier il y a plus de, moins de ou précisément n minutes.

-cnewer référence
    La date de dernière modification de l’état du fichier est plus récente que la date de dernière modification du fichier référence donné. Si le fichier référence donné est un lien symbolique et que les options -H ou -L sont actives, alors c'est la date de dernière modification de l’état du fichier pointé par le lien qui est considérée.

-ctime n
    Date de dernière modification de l'état du fichier il y a plus de, moins de ou précisément n*24 heures. Consultez l'explication concernant -atime pour comprendre comment l’effet d'arrondi altère l'interprétation de la date de dernière modification de l'état du fichier.

-empty
    Fichier vide. De plus, ce fichier doit être un fichier normal ou un répertoire.

-executable
    Correspond aux fichiers qui sont exécutables et aux répertoires qui sont accessibles (en ce qui concerne la résolution d'un nom de fichier). Les listes de contrôles d'accès (ACL) et autres artefacts de permissions sont pris en compte, à l'inverse du test -perm qui, lui, les ignore. Ce test utilise l'appel système access(2) et peut de ce fait être trompé par les serveurs NFS qui font de la substitution d'identité (ou du root squashing). En effet, de nombreux systèmes implémentent access(2) au niveau du client, et ne peuvent donc se servir des substitutions d'identité gérées du coté serveur. Puisque ce test n'est basé que sur le résultat fourni par l'appel système access(2), il n'y a aucune garantie qu'un fichier trouvé par ce test soit réellement exécutable.

-false
    Toujours faux.

-fstype type
    Fichier se trouvant sur un système de fichiers du type indiqué. Les types autorisés de systèmes de fichiers dépendent de la version d'Unix. Une liste non exhaustive des systèmes acceptés 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 systèmes de fichiers.

-gid n
    Fichier dont le GID numérique vaut plus de, moins de ou précisément n.

-group nom_groupe
    Fichier appartenant au groupe nom_groupe (éventuellement un identifiant numérique).

-ilname motif
    Semblable à -lname, mais sans différencier les majuscules et les minuscules. Si les options -L ou -follow sont actives, ce test renvoie toujours faux, à moins que le lien symbolique ne soit cassé.

-iname motif
    Semblable à -name, mais sans différencier 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 à un fichier nommé « totobidule ».

-inum n
    Fichier dont le numéro d'inœud est inférieur à, supérieur à ou égal à n. Il est en général plus facile d'utiliser le test -samefile.

-ipath motif
    Semblable à -path, mais sans différencier les majuscules et les minuscules.

-iregex motif
    Semblable à -regex, mais sans différencier 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 précisément n liens physiques.

-lname motif
    Fichier représentant un lien symbolique, dont le contenu correspond au motif indiqué. Lors du développement des métacaractères, « / » et « . » ne sont pas traités différemment des autres caractères. Si les options -L ou -follow sont actives, ce test renvoie faux, sauf si le lien symbolique est cassé.

-mmin n
    Fichier dont les données ont été modifiées il y a plus de, moins de ou précisément n minutes.

-mtime n
    Fichier dont les données ont été modifiées il y a moins de, plus de ou précisément n*24 heures. Consultez l'explication sur -atime pour comprendre comment les arrondis affectent l'interprétation des dates de modification des fichiers.

-name motif
    Fichier dont le nom de base (chemin sans le répertoire parent) correspond au motif du shell. Les répertoires parent étant supprimés, les noms de fichier englobés dans une recherche avec -name n'incluront jamais de barre oblique, donc « -name a/b » ne trouvera rien (vous devrez probablement utiliser plutôt -path). Un avertissement apparaît si vous essayez de le faire, sauf si la variable d'environnement POSIXLY_CORRECT est définie. Les métacaractères (« * », « ? », et « [] ») peuvent correspondre à un point « . » au début du nom du fichier (c'est une évolution de findutils-4.2.2, consultez la section CONFORMITÉ AUX STANDARDS plus loin). Pour ignorer un répertoire, ainsi que tous ses fichiers, utilisez l'option -prune plutôt que de vérifier chaque fichier de l’arbre (vous trouverez un exemple dans la description de cette action). Les parenthèses ne sont pas considérées comme des caractères spéciaux, bien que certains interpréteurs de commandes (dont le Bash) attribuent aux parenthèses un rôle particulier. La correspondance avec le nom du fichier est obtenue par l'utilisation de la fonction fnmatch(3) de la bibliothèque. N'oubliez pas de protéger votre motif entre des guillemets afin d'éviter l'expansion des métacaractères par l'interpréteur de commandes.

-newer référence
    La date de la dernière modification du fichier courant est plus récente que celle du fichier référence indiqué. Si le fichier référence est un lien symbolique et que les options -H ou -L sont actives, c'est la date de modification du fichier pointé qui sera considérée.

-newerXY référence
    Réussit si l'horodatage X d'un fichier est plus récent que celui Y d'un fichier référence. Les lettres X et Y peuvent être une des suivantes :
    a | La date et l'heure de dernier accès au fichier référence
    B | La date et l'heure de création du fichier référence
    c | La date et l'heure de changement d'état de l'inode référence
    m | La date et l'heure de dernière modification du fichier référence
    t | référence est directement interprétée en tant qu'heure
    Certaines combinaisons ne sont pas valables, comme X utilisé avec t. Certaines combinaisons ne sont pas implémentées sur certains systèmes, comme B qui n'est pas pris en charge par tous les systèmes. Une erreur fatale sera renvoyée si une combinaison non valable ou non implémentée de XY est appelée. Les dates et heures sont interprétées comme les arguments de l'option -d de la commande date de GNU. Si vous essayez d'utiliser la date de création d'un fichier, et que cette date de création ne peut pas être déterminée, vous obtiendrez un message d'erreur fatale. Si vous spécifiez un test qui se réfère à la date de création des fichiers à examiner, ce test échouera pour chaque fichier pour lequel la date de création est inconnue.

-nogroup
    Fichier dont l'identifiant de groupe numérique ne correspond à aucun groupe d'utilisateurs.

-nouser
    Fichier dont l'UID numérique ne correspond à aucun utilisateur.

-path motif
    Fichier dont le nom correspond au motif motif. Les métacaractères « / » ou « . » ne sont pas interprétés, d'où, par exemple,
    find . -path "./sr*sc"
    will print an entry for a directory called ./src/misc (if one exists). To ignore a whole directory tree, use -prune rather than checking every file in the tree. Note that the pattern match test applies to the whole file name, starting from one of the start points named on the command line. It would only make sense to use an absolute path name here if the relevant start point is also an absolute path. This means that this command will never match anything:
    find bar -path /foo/bar/myfile -print
    Find compare l'argument -path à la concaténation du nom du répertoire et le nom de base du fichier en cours d'examen. La concaténation ne se terminant jamais par une barre oblique, les arguments -path qui se terminent par ce signe ne trouveront rien (sauf peut-être un point de départ spécifié sur la ligne de commande). Le prédicat -path est également pris en charge par HP-UX find et fait partie du standard POSIX 2008.

-perm mode
    Fichier dont les bits d'autorisations sont fixés exactement au mode indiqué (en notation symbolique ou octale). Puisqu'une correspondance stricte est requise, si vous voulez utiliser cette forme de modes symboliques, vous risquez d'être obligé d'utiliser une chaîne de caractères plutôt compliquée -perm g=w, par exemple, ne recherchera que les fichiers qui ont le mode 0020 (c'est-à-dire, ceux pour lesquels la permission d'écriture pour le groupe est la seule permission définie). Vous voudrez plus certainement utiliser les formes « / » ou « - », telles que -perm -g=w, qui correspondent à tous les fichiers qui ont le droit d'écriture pour les groupes. Consultez la section EXEMPLES pour des exemples plus significatifs.

-perm -mode
    Fichier ayant tous les bits d'autorisations indiqués dans le mode. Les notations symboliques sont acceptées dans ce cas, et c'est en général 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
    Any of the permission bits mode are set for the file. Symbolic modes are accepted in this form. You must specify `u', `g' or `o' if you use a symbolic mode. See the EXAMPLES section for some illustrative examples. If no permission bits in mode are set, this test matches any file (the idea here is to be consistent with the behaviour of -perm -000).

-perm +mode
    Cela n'est plus pris en charge (et obsolète depuis 2005). Utilisez plutôt -perm /mode.

-readable
    Correspond aux fichiers qui sont accessibles en lecture par l'utilisateur actuel. Les listes de contrôle d'accès (ACL) et les autres artefacts de permissions sont pris en compte, à l'inverse du test -perm qui, lui, les ignore. Ce test utilise l'appel système access(2), et peut, de ce fait, être trompé par les serveurs NFS qui font de la substitution d'identité (UID mapping ou root squashing). En effet, de nombreux systèmes implémentent access(2) au niveau du client, et ne peuvent donc se servir des substitutions d'identités gérées du coté serveur.

-regex motif
    File name matches regular expression pattern. This is a match on the whole path, not a search. For example, to match a file named ./fubar3, you can use the regular expression `.*bar.' or `.*b.*3', but not `f.*r3'. The regular expressions understood by find are by default Emacs Regular Expressions (except that `.' matches newline), but this can be changed with the -regextype option.

-samefile nom
    Fichier qui se réfère au même inode que nom. Quand -L est actif, cela inclut les liens symboliques.

-size n[cwbkMG]
    Fichier utilisant moins de, plus de ou précisément n unités d'espace arrondi au nombre supérieur. On pourra utiliser les suffixes suivants :

    « b »
        Pour des blocs de 512 octets (comportement par défaut si rien n'est indiqué).

    « c »
        Pour indiquer des octets.

    « w »
        Pour des mots de deux octets.

    « k »
        Pour des kilooctets informatiques (KiO, unités de 1024 octets)

    « M »
        Pour des mégaoctets informatiques (MiO, unités de 1024 * 1024 = 1048576 octets)

    « G »
        pour des gigaoctets informatiques (GiO, unités de 1024 * 1024 * 1024 = 1073741824 octets)

    The size is simply the st_size member of the struct stat populated by the lstat (or stat) system call, rounded up as shown above. In other words, it's consistent with the result you get for ls -l. Bear in mind that the `%k' and `%b' format specifiers of -printf handle sparse files differently. The `b' suffix always denotes 512-byte blocks and never 1024-byte blocks, which is different to the behaviour of -ls.

    The + and - prefixes signify greater than and less than, as usual; i.e., an exact size of n units does not match. Bear in mind that the size is rounded up to the next unit. Therefore -size -1M is not equivalent to -size -1048576c. The former only matches empty files, the latter matches files from 0 to 1,048,575 bytes.

-true
    Toujours vrai.

-type c
    Fichier du type c :

    b   Fichier spécial en mode bloc (avec tampon)

    c   Fichier spécial en mode caractère (sans tampon)

    d   directory

    p   Tube nommé (FIFO)

    f   Fichier régulier

    l   Lien symbolique, n'est jamais vrai si les options -L ou -follow sont actives, à moins que le lien symbolique ne soit cassé. 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 à la fois, vous pouvez fournir une liste combinée de lettres de types séparées par une virgule « , » (extension GNU).

-uid n
    Fichier dont l'identifiant utilisateur numérique vaut plus de, moins de ou précisément n.

-used n
    Fichier dont le dernier accès date de plus de, moins de ou précisément n jours après sa date de dernière modification.

-user utilisateur
    Fichier appartenant à l'utilisateur indiqué (identifiant utilisateur numérique éventuellement).

-wholename motif
    Voir -path. Cette option est moins portable que -path.

-writable
    Correspond aux fichiers qui sont accessibles en écriture par l'utilisateur actuel. Les listes de contrôle d'accès (ACL) et les autres artefacts de permissions sont pris en compte, à l'inverse du test -perm qui, lui, les ignore. Ce test utilise l'appel système access(2), et peut, de ce fait, être trompé par les serveurs NFS qui font de la substitution d'identité (UID mapping ou root squashing), étant donné que de nombreux systèmes implémentent access(2) au niveau du noyau du client, et ne peuvent donc se servir des substitutions d'identités gérées du côté serveur.

-xtype c
    Semblable à -type sauf si le fichier est un lien symbolique. Pour les liens symboliques, si les options -H ou -P ont été spécifiées, le test est vrai si le fichier pointé par le lien est de type c ; si l'option -L a été spécifiée, le test est vrai si c vaut « l ». Autrement dit, pour les liens symboliques, -xtype vérifie le type des fichiers que l'option -type ne vérifie pas.

-context motif
    (SELinux seulement) le contexte de sécurité du fichier correspond au motif global.

  ACTIONS

-delete
    Effacer les fichiers, et renvoyer vrai si l'effacement a réussi. Si l'effacement échoue, un message d'erreur est envoyé. Si -delete échoue, le code de retour de find sera différent de zéro (quand finalement 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 évaluée comme une expression. Écrire -delete en premier forcera find à essayer d'effacer tout ce qui se trouve dans les points de départ que vous avez indiqué. Lorsque vous testez une ligne de commande de find qui utilisera -delete, vous devriez préciser l'option -depth afin d'éviter les surprises plus tard. Puisque -delete entraîne -depth, vous ne pouvez pas utiliser en même temps -prune et -delete. Avec l'option -ignore_readdir_race, find ignorera les erreurs de l'action -delete si le fichier a disparu depuis que le répertoire parent a été lu : il n'affichera pas de diagnostic d'erreur et le code de retour de l'action -delete sera vrai.

-exec commande ;
    Exécuter la commande ; vrai si le code de retour 0 est renvoyé. Tous les paramètres qui suivent find sont considérés comme des paramètres pour la ligne de commande, jusqu'à la rencontre d'un caractère « ; ». La chaîne « {} » est remplacée par le nom du fichier en cours de traitement, cela dans toutes ses occurrences sur la ligne de commande, et pas seulement aux endroits où elle est isolée, comme c'est le cas avec d'autres versions de find. Ces deux chaînes peuvent avoir besoin d'être protégées du développement de la ligne de commande par l'interpréteur, en utilisant le caractère d'échappement (« \ ») ou une protection par des guillemets. Consultez la section EXEMPLES pour des exemples d'utilisation de l'option -exec. La commande indiquée est exécutée à chaque fois qu'un fichier correspond. La commande est exécutée depuis le répertoire de départ. Il existe d'inévitables problèmes de sécurité associés à l'usage de l'option -exec, c'est pourquoi vous devriez utiliser l'option -execdir à la place.

-exec commande {} +
    This variant of the -exec action runs the specified command on the selected files, but the command line is built by appending each selected file name at the end; the total number of invocations of the command will be much less than the number of matched files. The command line is built in much the same way that xargs builds its command lines. Only one instance of `{}' is allowed within the command, and it must appear at the end, immediately before the `+'; it needs to be escaped (with a `\') or quoted to protect it from interpretation by the shell. The command is executed in the starting directory. If any invocation with the `+' form returns a non-zero value as exit status, then find returns a non-zero exit status. If find encounters an error, this can sometimes cause an immediate exit, so some pending commands may not be run at all. For this reason -exec my-command ... {} + -quit may not result in my-command actually being run. This variant of -exec always returns true.

-execdir commande ;

-execdir commande {} +
    Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you started find. As with -exec, the {} should be quoted if find is being invoked from a shell. This a much more secure method for invoking commands, as it avoids race conditions during resolution of the paths to the matched files. As with the -exec action, the `+' form of -execdir will build a command line to process more than one matched file, but any given invocation of command will only list files that exist in the same subdirectory. If you use this option, you must ensure that your $PATH environment variable does not reference `.'; otherwise, an attacker can run any commands they like by leaving an appropriately-named file in a directory in which you will run -execdir. The same applies to having entries in $PATH which are empty or which are not absolute directory names. If any invocation with the `+' form returns a non-zero value as exit status, then find returns a non-zero exit status. If find encounters an error, this can sometimes cause an immediate exit, so some pending commands may not be run at all. The result of the action depends on whether the + or the ; variant is being used; -execdir command {} + always returns true, while -execdir command {} ; returns true only if command returns 0.

-fls fichier
    Vrai ; semblable à -ls, mais écrire dans le fichier comme le fait -fprint. Le fichier en sortie est toujours créé, même si le prédicat n'est jamais vérifié. Consultez la section NOMS DE FICHIERS PEU COURANTS pour obtenir des informations sur la gestion des caractères inhabituels dans les noms de fichier.

-fprint fichier
    True; print the full file name into file file. If file does not exist when find is run, it is created; if it does exist, it is truncated. The file names /dev/stdout and /dev/stderr are handled specially; they refer to the standard output and standard error output, respectively. The output file is always created, even if the predicate is never matched. See the UNUSUAL FILENAMES section for information about how unusual characters in filenames are handled.

-fprint0 fichier
    Vrai ; semblable à -print0 mais écrire dans le fichier comme le fait -fprint. Le fichier de sortie est toujours créé, même si le prédicat n'est jamais vérifié. Consultez la section NOMS DE FICHIERS PEU COURANTS pour obtenir des informations sur la gestion des caractères inhabituels dans les noms de fichiers.

-fprintf fichier format
    Vrai ; semblable à -printf mais écrire dans le fichier comme le fait -fprint. Le fichier de sortie est toujours créé, même si le prédicat n'est jamais vérifié. Consultez la section NOMS DE FICHIERS PEU COURANTS pour obtenir des informations sur la gestion des caractères 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 calculée en blocs de 1 Ko, à moins que la variable d'environnement POSIXLY_CORRECT ne soit positionnée, auquel cas la taille est calculée en blocs de 512 octets. Consultez la section NOMS DE FICHIERS PEU COURANTS pour obtenir des informations sur la gestion des caractères inhabituels dans les noms de fichier.

-ok commande ;
    Like -exec but ask the user first. If the user agrees, run the command. Otherwise just return false. If the command is run, its standard input is redirected from /dev/null.

    La réponse à l’invite de commande est comparée à deux expressions rationnelles afin de déterminer s'il s'agit d'une réponse positive ou négative. Ces expressions rationnelles sont données par le système si la variable d'environnement POSIXLY_CORRECT est définie, et dans le cas contraire, dans les traductions des messages de find. Si le système n'a aucune définition appropriée, les propres définitions de find seront utilisées. Dans tous les cas, l'interprétation de ces expressions rationnelles sera modifiée par les variables d'environnement LC_CTYPE (classe de caractères) et LC_COLLATE (caractères étendus et classes d’équivalence).

-okdir commande ;
    Like -execdir but ask the user first in the same way as for -ok. If the user does not agree, just return false. If the command is run, its standard input is redirected from /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 très sérieusement opter pour l'option -print0 plutôt que -print. Consultez la section NOMS DE FICHIERS PEU COURANTS pour obtenir des informations sur la gestion des caractères inhabituels dans les noms de fichier.

-print0
    Vrai ; afficher le nom complet du fichier sur la sortie standard, suivi d'un octet NULL (à la place du caractère saut de ligne que -print utilise). Cela permet aux fichiers dont le nom contient un saut de ligne ou d'autres types de caractères non affichables, d'être correctement interprétés par les programmes utilisant les données en sortie de find. Cette option correspond à l'option -0 de xargs.

-printf format
    True; print format on the standard output, interpreting `\' escapes and `%' directives. Field widths and precisions can be specified as with the printf(3) C function. Please note that many of the fields are printed as %s rather than %d, and this may mean that flags don't work as you might expect. This also means that the `-' flag does work (it forces fields to be left-aligned). Unlike -print, -printf does not add a newline at the end of the string. The escapes and directives are:

    \a  Sonnerie.

    \b  Effacement arrière (Backspace).

    \c  Arrêter immédiatement 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  Caractère ASCII NUL.

    \\  Un caractère « \ » littéral.

    \NNN
        Le caractère ASCII dont le code est NNN (en octal).

    Un « \ » suivi de n'importe quel autre caractère est traité comme un caractère ordinaire ; ils sont donc affichés tous les deux.

    %%  Un caractère pourcentage littéral (%).

    %a  File's last access time in the format returned by the C ctime(3) function.

    %Ak File's last access time in the format specified by k, which is either `@' or a directive for the C strftime(3) function. The following shows an incomplete list of possible values for k. Please refer to the documentation of strftime(3) for the full list. Some of the conversion specification characters might not be available on all systems, due to differences in the implementation of the strftime(3) library function.

        @   Secondes écoulées depuis le 1er janvier 1970 à 00 h 00 GMT, avec une partie décimale.

        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 désignation locale

        r   Heure au format 12 heures (hh:mm:ss [AP]M)

        S   Seconde (00.00 .. 61.00). Une partie est fractionnée.

        T   Heure au format 24 heures (hh:mm:ss.xxxxxxxxxx)

        +   La date et l'heure, séparées par un « + », « 2004-04-28+22:22:05 » par exemple. C’est une extension GNU. L'heure est donnée dans la zone horaire courante (qui peut être modifiée à l’aide de la variable d'environnement TZ). Le second champ contient une partie décimale.

        X   Représentation locale de l'heure (H:M:S). Le champ secondes comprend une partie fractionnée.

        Z   Fuseau horaire (par exemple MET), ou rien si le fuseau horaire est indéterminé.

        Champs de date :

        a   Abréviation locale du jour de la semaine (lun..dim)

        A   Nom local entier du jour de la semaine, de longueur variable (lundi..dimanche)

        b   Abréviation locale du mois (jan..déc)

        B   Nom local entier du mois, de longueur variable (janvier..décembre)

        c   Date et heure locale (Sat Nov 04 12:02:33 EST 1989). Le format utilisé est le même que pour ctime(3), et, afin de préserver la compatibilité avec ce format, il n'y a pas de partie décimale pour les secondes.

        d   Quantième du mois (01..31)

        D   Date (mm/jj/aa)

        F   date (mm/jj/aaaa)

        h   Identique à b

        j   quantième du jour dans l'année (001..366)

        m   mois (01..12)

        U   Numéro de la semaine dans l'année, les semaines commençant le dimanche (00..53)

        w   Jour de la semaine (0..6)

        W   Numéro de la semaine dans l'année, les semaines commençant le lundi (00..53)

        x   Représentation locale de la date (mm/jj/aa)

        y   deux derniers chiffres de l'année (00..99)

        Y   Année (1970...)

    %b  Taille de l'espace disque consommé par le fichier, en nombre de blocs de 512 octets. Puisque l'espace disque est alloué par multiple de la taille d'un bloc du système de fichiers, on obtient souvent un résultat supérieur à %s/512. Il peut aussi être inférieur si le fichier est creux (sparse file).

    %c  File's last status change time in the format returned by the C ctime(3) function.

    %Ck Date de dernière modification du statut du fichier, dans le format spécifié par k, comme pour la directive %A.

    %d  Profondeur du fichier dans l'arborescence des répertoires, 0 signifiant que le fichier est un paramètre de la ligne de commande.

    %D  Le numéro du périphérique sur lequel le fichier est rangé (la valeur du champ st_dev de struct stat) exprimé selon le système décimal.

    %f  Print the basename; the file's name with any leading directories removed (only the last element). For /, the result is `/'. See the EXAMPLES section for an example.

    %F  Type de système de fichiers sur lequel se trouve le fichier. Cette valeur peut être utilisée pour l'option -fstype.

    %g  Nom du groupe propriétaire du fichier, ou identifiant de groupe numérique si le groupe n'a pas de nom.

    %G  Identifiant de groupe numérique du fichier.

    %h  Dirname; the Leading directories of the file's name (all but the last element). If the file name contains no slashes (since it is in the current directory) the %h specifier expands to `.'. For files which are themselves directories and contain a slash (including /), %h expands to the empty string. See the EXAMPLES section for an example.

    %H  Point de départ à partir duquel le fichier a été trouvé.

    %i  Numéro d'inode du fichier (selon le système décimal).

    %k  Taille de l'espace disque utilisé par un fichier, en nombre de blocs de 1 kilo-octet. Puisque l'espace disque est alloué par multiple de la taille d'un bloc du système de fichiers, on obtient souvent un résultat supérieur à %s/1024. Il peut aussi être inférieur 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'accès au fichier (en système octal). Cette option utilise les nombres « traditionnellement » utilisés dans la plupart des implémentations d'Unix, mais si votre système utilise un ordre inhabituel de la forme octale des bits de permissions, alors vous observerez une différence entre la valeur réelle des modes du fichier et la sortie de %m. On veut habituellement un zéro en début 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 départ sous lequel il a été trouvé.

    %s  Taille du fichier en octets.

    %S  Densité du fichier, calculée par la formule TAILLEBLOC*nb_bloc/taille_fichier. La valeur obtenue pour un fichier régulier d'une certaine taille dépend du système d'exploitation. Toutefois, la valeur normalement attendue pour un fichier creux (sparse file) est inférieure à 1.0, tandis qu'un fichier qui utilise l'indirection de blocs pourra obtenir une valeur supérieure à 1.0. En général, le nombre de blocs utilisés par un fichier dépend du système de fichiers. La valeur de TAILLEBLOC est dépendante du système, mais est souvent de 512 octets. Si le fichier a une taille nulle, la valeur affichée est indéfinie. Sur les systèmes qui n'offrent pas la gestion des nombres de blocs, la valeur de la densité du fichier sera de 1.0.

    %t  File's last modification time in the format returned by the C ctime(3) function.

    %Tk Date de dernière modification du fichier, dans le format spécifié par k, comme pour la directive %A.

    %u  Nom du propriétaire du fichier, ou identifiant utilisateur numérique si l'utilisateur n'a pas de nom.

    %U  Identifiant utilisateur numérique du propriétaire 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 détermination du type de la cible du lien symbolique.

    %Z  (SELinux seulement) Le contexte de sécurité du fichier.

    %{ %[ %(
        Réservé pour une utilisation future.

    Un caractère « % » suivi de n'importe quel autre caractère est supprimé, mais le second caractère est affiché (ne soyez pas trop confiant cependant, car de nouveaux caractères de format pourront être un jour utilisés). Un « % » à la fin de l'argument de format peut engendrer un comportement aléatoire puisqu'il n'y a aucun caractère suivant. Ce qui peut être plus ou moins grave suivant les cas. The %m and %d directives support the #, 0 and + flags, but the other directives do not, even if they print numbers. Numeric directives that do not support these flags include G, U, b, D, k and n. The `-' format flag is supported and changes the alignment of a field from right-justified (which is the default) to left-justified.

    Consultez la section NOMS DE FICHIERS PEU COURANTS pour obtenir des informations sur la gestion des caractères inhabituels dans les noms de fichier.

-prune
    True; if the file is a directory, do not descend into it. If -depth is given, then -prune has no effect. Because -delete implies -depth, you cannot usefully use -prune and -delete together. For example, to skip the directory src/emacs and all files and directories under it, and print the names of the other files found, do something like this:
    find . -path ./src/emacs -prune -o -print

-quit
    Exit immediately (with return value zero if no errors have occurred). This is different to -prune because -prune only applies to the contents of pruned directories, while -quit simply makes find stop immediately. No child processes will be left running. Any command lines which have been built by -exec ... + or -execdir ... + are invoked before the program is exited. After -quit is executed, no more files specified on the command line will be processed. For example, `find /tmp/foo /tmp/bar -print -quit` will print only `/tmp/foo`.
    One common use of -quit is to stop searching the file system once we have found what we want. For example, if we want to find just a single file we can do this:
    find / -name needle -print -quit

  OPÉRATEURS
Dans l'ordre de priorité décroissante :

( expr )
    Forcer la priorité. Comme les parenthèses risquent d'être interprétées par le shell, vous devriez normalement les protéger. 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 caractère doit habituellement être protégé pour éviter d'être interprété par le shell.

-not expr
    Identique à ! expr, mais non conforme à la norme POSIX.

expr1 expr2
    Deux expressions sur la même ligne sont prises pour être jointes par un -a impliqué ; expr2 n'est pas évalué si expr1 est faux.

expr1 -a expr2
    Identique à expr1 expr2.

expr1 -and expr2
    Identique à expr1 expr2, mais non conforme à la norme POSIX.

expr1 -o expr2
    OU ; expr2 n'est pas évaluée si expr1 est vraie.

expr1 -or expr2
    Identique à expr1 -o expr2, mais non conforme à la norme POSIX.

expr1 , expr2
    Lister ; expr1 et expr2 sont toujours évaluées. La valeur de expr1 est annulée, la valeur de la liste est la valeur de expr2. Le séparateur virgule est pratique pour rechercher différents types de choses tout en ne traversant qu'une fois l'arborescence du système de fichiers. L'action -fprintf peut être utilisée pour récupérer une liste d'éléments variés pour les ranger dans différents fichiers en sortie.

Veuillez remarquer le -a, quand il est spécifié implicitement (par exemple par deux tests sans opérateur explicite entre eux) ou explicitement, a une plus haute priorité 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 données qui sont sous le contrôle 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 problèmes potentiels puisqu'ils peuvent contenir n'importe quel caractère, à l'exception de « \0 » et « / ». Les caractères inhabituels dans les noms de fichier peuvent produire des résultats inattendus et souvent indésirables sur votre terminal (modifier les définitions des touches de fonctions de certains terminaux, par exemple). Les caractères inhabituels sont gérés de différentes façons selon les actions, selon la description ci-dessous.

-print0, -fprint0
    Afficher toujours exactement le nom de fichier non modifié, même si la sortie est un terminal.

-ls, -fls
    Tout caractère inhabituel est toujours protégé. Les espaces, les barres obliques inverses et les guillemets sont affichés selon les conventions des échappements du C (« \f »,« \" », par exemple). Tous les autres caractères inhabituels sont affichés en utilisant une protection octale. Tous les autres caractères affichables (en ce qui concerne -ls et -fls, il s'agit des caractères dont le code octal est compris entre 041 et 0176) sont affichés en l'état.

-printf, -fprintf
    Si la sortie n'est pas un terminal, les caractères sont affichés en l'état. Sinon, le résultat dépend de la directive en cours d'utilisation. Les directives %D, %F, %g, %G, %H, %Y et %y sont transformées en valeurs non contrôlées par les propriétaires des fichiers, et donc imprimées 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 contrôle des propriétaires des fichiers, mais qui ne peuvent pas être utilisées pour envoyer des données arbitraires au terminal, elles sont donc imprimées telles quelles. Les directives %f, %h, %l, %p et %P sont protégées par des guillemets. Cette protection est appliquée à la manière du ls du GNU. Il ne s'agit pas du même mécanisme de protection que celui utilisé pour -ls et -fls. Si vous pouvez choisir le format à utiliser pour la sortie de find, sachez qu'il vaut mieux utiliser « \0 » plutôt que nouvelle ligne en tant que terminaison, car les noms de fichiers peuvent contenir des caractères espace ou nouvelle ligne. Le réglage de la variable d'environnement LC_CTYPE permet de définir la liste des caractères qui doivent être protégés.

-print, -fprint
    Les guillemets sont gérés à la manière 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 être préférée à -print.

Les actions -ok et -okdir affichent le nom du fichier traité tel qu'il est. Cela pourrait changer dans une version ultérieure.

CONFORMITÉ AUX STANDARDS
Vous devriez définir la variable d'environnement POSIXLY_CORRECT pour une compatibilité au plus proche du standard POSIX. Les options suivantes sont définies dans le standard POSIX (IEEE Std 1003.1-2008, Édition 2016) :

-H  Cette option est gérée.

-L  Cette option est gérée.

-name
    This option is supported, but POSIX conformance depends on the POSIX conformance of the system's fnmatch(3) library function. As of findutils-4.2.2, shell metacharacters (`*', `?' or `[]' for example) match a leading `.', because IEEE PASC interpretation 126 requires this. This is a change from previous versions of findutils.

-type
    Gérée. POSIX stipule « b », « c », « d », « l », « p », « f » et « s ». GNU find gère aussi « D », représentant un Door, pour les systèmes d'exploitation qui le fournissent. En outre, GNU find permet de spécifier plusieurs types à la fois dans une liste séparée par des virgules.

-ok Gérée. L'interprétation de la réponse est soumise aux motifs « oui » ou « non » sélectionnés grâce au réglage de la variable d'environnement LC_MESSAGES. Lorsque la variable d'environnement POSIXLY_CORRECT est définie, ces schémas sont obtenus à partir de la définition des réponses positives (yes) et négatives (no) du système. Consultez la documentation nl_langinfo(3) du système, et notamment YESEXPR et NOEXPR. Lorsque POSIXLY_CORRECT n'est pas défini, ces schémas sont extraits du propre catalogue de messages de find.

-newer
    Gérée. Si le fichier spécifié est un lien symbolique, il est toujours déréférencé. Cela est différent du comportement précédent, qui utilisait l’horodatage correspondant du lien symbolique (consultez la section HISTORIQUE plus loin).

-perm
    Gérée. Si la variable d'environnement POSIXLY_CORRECT n'est pas définie, quelques arguments de mode d'accès (par exemple +a+x), bien que non valables en POSIX, sont gérés par souci de rétro-compatibilité.

Autres primaires
    Les prédicats -atime, -ctime, -depth, -group, -links, -mtime, -nogroup, -nouser, -perm, -print, -prune, -size, -user et -xdev sont tous gérés.

The POSIX standard specifies parentheses `(', `)', negation `!' and the logical AND/OR operators -a and -o.

Toutes les autres options, prédicats, expressions et ainsi de suite sont des extensions hors du standard POSIX. Beaucoup de ces extensions ne sont de toutes façons pas l'apanage de GNU find.

Le standard POSIX impose que find détecte les boucles.

    L'utilitaire find doit détecter les boucles infinies, telles que le retour dans un répertoire déjà visité, alors qu'on revient du dernier fichier rencontré. Quand il détecte une boucle infinie, find doit afficher un message de diagnostic sur la sortie d'erreur, et essayer de revenir à sa position d'origine ou s'arrêter.

La commande find du GNU est conforme à cette exigence. Le décompte des liens dans un répertoire qui contient des liens en dur vers des répertoires parent sera souvent inférieur à celui attendu. Cela peut être dû au fait que GNU find optimise l'accès en évitant de parcourir un sous-répertoire qui s'avère être un lien vers un répertoire parent. Bien que find ne parcourt pas le répertoire dans ce cas précis, il permet aussi d'éviter l'émission d'un message d'avertissement. Cette façon de faire peut sembler génératrice d'erreurs, mais il est peu probable que quiconque puisse réellement en être gêné. Si l'optimisation du parcours des feuilles (NDT : leaf) a été désactivée avec -noleaf, cette entrée du répertoire sera bel et bien parcourue, et le message d'avertissement émis si nécessaire. Les liens symboliques ne peuvent pas servir à créer de telles boucles dans le système de fichiers, par contre, si les options -L ou -follow sont actives, alors un message d'avertissement sera émis 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 à appliquer stat() ou chdir() sur le lien symbolique, et donc que ce diagnostic est souvent inutile.

L'option -d est gérée pour des raisons de compatibilité avec divers systèmes BSD, mais préférez plutôt 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 ou -iregex parce que ces tests ne sont pas définis dans le standard POSIX.

VARIABLES D'ENVIRONNEMENT

LANG
    Fournit une valeur par défaut pour les variables de localisation qui ne sont pas définies ou nulles.

LC_ALL
    Si elle contient une chaîne de caractères 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 à l’œuvre dans l'option -name. Le GNU find utilise la fonction fnmatch(3) de la bibliothèque, et donc la gestion du LC_COLLATE » dépend de la bibliothèque présente sur votre système. Cette variable affecte également l'interprétation de la réponse à -ok ; alors que la variable LC_MESSAGES sélectionne le motif effectivement utilisé pour interpréter la réponse à -ok, l'interprétation des expressions entre crochets dans le motif sera affectée par LC_COLLATE.

LC_CTYPE
    Cette variable contrôle le traitement des classes de caractères utilisées dans les expressions rationnelles ainsi que dans le test -name, si la fonction fnmatch(3) fournie par la bibliothèque le gère. Cette variable altère aussi l'interprétation de toute classe de caractères des expressions rationnelles utilisées pour analyser la réponse donnée aux questions posées par -ok. La variable d'environnement LC_CTYPE modifie aussi la liste des caractères dit non imprimables lors de l'affichage des noms de fichiers. Consultez la section NOMS DE FICHIERS PEU COURANTS.

LC_MESSAGES
    Définit la locale à utiliser pour les messages internationalisés. Lorsque la variable d'environnement POSIXLY_CORRECT est définie, cela détermine aussi l'interprétation des réponses fournies aux questions posées par l'action -ok.

NLSPATH
    Détermine l'endroit où sont rangés les catalogues de messages localisés.

PATH
    Détermine les répertoires dans lesquels find cherchera les exécutables invoqués par -exec, -execdir, -ok et -okdir.

POSIXLY_CORRECT
    Détermine la taille des blocs utilisés par -ls et -fls. Si POSIXLY_CORRECT est défini, les blocs sont des unités de 512 octets. Sinon, il s'agit d'unités de 1024 octets.

    Définir cette variable désactive aussi par défaut les messages d'avertissement (c'est-à-dire entraîne -nowarn), puisque POSIX impose que sauf dans le cas de l'affichage de -ok, tous les messages affichés sur la sortie d’erreur doivent être des messages de diagnostic et ne doivent être générés que dans le cas d'une sortie avec un état différent de zéro.

    When POSIXLY_CORRECT is not set, -perm +zzz is treated just like -perm /zzz if +zzz is not a valid symbolic mode. When POSIXLY_CORRECT is set, such constructs are treated as an error.

    Lorsque POSIXLY_CORRECT est défini, la réponse aux questions posées par l'action -ok est analysée selon le catalogue des messages du système, et non selon les propres messages du catalogue de find.

TZ  Modifie le fuseau horaire utilisé dans le format de certaines directives liées au temps dans -printf et -fprintf.

EXEMPLES

  Simple `find|xargs` approach

•   Find files named core in or below the directory /tmp and delete them.

    $ find /tmp -name core -type f -print | xargs /bin/rm -f

    Note that this will work incorrectly if there are any filenames containing newlines, single or double quotes, or spaces.

  Safer `find -print0 | xargs -0` approach

•   Find files named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing single or double quotes, spaces or newlines are correctly handled.

    $ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

    The -name test comes before the -type test in order to avoid having to call stat(2) on every file.

Note that there is still a race between the time find traverses the hierarchy printing the matching filenames, and the time the process executed by xargs works with that file.

  Executing a command for each file

•   Run file on every file in or below the current directory.

    $ find . -type f -exec file '{}' \;

    Notice that the braces are enclosed in single quote marks to protect them from interpretation as shell script punctuation. The semicolon is similarly protected by the use of a backslash, though single quotes could have been used in that case also.

In many cases, one might prefer the `-exec ... +` or better the `-execdir ... +` syntax for performance and security reasons.

  Traversing the filesystem just once - for 2 different actions

•   Traverse the filesystem just once, listing set-user-ID files and directories into /root/suid.txt and large files into /root/big.txt.

    $ find / \
    \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
    \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

    This example uses the line-continuation character '\' on the first two lines to instruct the shell to continue reading the command on the next line.

  Searching files by age

•   Search for files in your home directory which have been modified in the last twenty-four hours.

    $ find $HOME -mtime 0

    This command works this way because the time since each file was last modified is divided by 24 hours and any remainder is discarded. That means that to match -mtime 0, a file will have to have a modification in the past which is less than 24 hours ago.

  Searching files by permissions

•   Rechercher les fichiers qui offrent le droit d'exécution, mais qui ne sont pas lisibles.

    $ find /sbin /usr/sbin -executable \! -readable -print

•   Search for files which have read and write permission for their owner, and group, but which other users can read but not write to.

    $ find . -perm 664

    Files which meet these criteria but have other permissions bits set (for example if someone can execute the file) will not be matched.

•   Search for files which have read and write permission for their owner and group, and which other users can read, without regard to the presence of any extra permission bits (for example the executable bit).

    $ find . -perm -664

    This will match a file which has mode 0777, for example.

•   Rechercher les fichiers qui offrent le droit d'écriture à quelqu'un (son propriétaire ou son groupe, ou bien n'importe qui).

    $ find . -perm /222

•   Search for files which are writable by either their owner or their group.

    $ find . -perm /220
    $ find . -perm /u+w,g+w
    $ find . -perm /u=w,g=w

    All three of these commands do the same thing, but the first one uses the octal representation of the file mode, and the other two use the symbolic form. The files don't have to be writable by both the owner and group to be matched; either will do.

•   Search for files which are writable by both their owner and their group.

    $ find . -perm -220
    $ find . -perm -g+w,u+w

    Both these commands do the same thing.

•   A more elaborate search on permissions.

    $ find . -perm -444 -perm /222 \! -perm /111
    $ find . -perm -a+r -perm /a+w \! -perm /a+x

    These two commands both search for files that are readable for everybody (-perm -444 or -perm -a+r), have at least one write bit set (-perm /222 or -perm /a+w) but are not executable for anybody (! -perm /111 or ! -perm /a+x respectively).

  Pruning - omitting files and subdirectories

•   Copy the contents of /source-dir to /dest-dir, but omit files and directories named .snapshot (and anything in them). It also omits files or directories whose name ends in '~', but not their contents.

    $ cd /source-dir
    $ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
    | cpio -pmd0 /dest-dir

    The construct -prune -o \( ... -print0 \) is quite common. The idea here is that the expression before -prune matches things which are to be pruned. However, the -prune action itself returns true, so the following -o ensures that the right hand side is evaluated only for those directories which didn't get pruned (the contents of the pruned directories are not even visited, so their contents are irrelevant). The expression on the right hand side of the -o is in parentheses only for clarity. It emphasises that the -print0 action takes place only for things that didn't have -prune applied to them. Because the default `and' condition between tests binds more tightly than -o, this is the default anyway, but the parentheses help to show what is going on.

•   Étant donné les répertoires de projets suivants et les répertoires d'administration de leurs systèmes 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

    Sample output:

    repo/project1/CVS
    repo/gnu/project2/.svn
    repo/gnu/project3/.svn
    repo/gnu/project3/src/.svn
    repo/project4/.git

    In this example, -prune prevents unnecessary descent into directories that have already been discovered (for example we do not search project3/src because we already found project3/.svn), but ensures sibling directories (project2 and project3) are found.

  Other useful examples

•   Search for several file types.

    $ find /tmp -type f,d,l

    Search for files, directories, and symbolic links in the directory /tmp passing these types as a comma-separated list (GNU extension), which is otherwise equivalent to the longer, yet more portable:

    $ find /tmp \( -type f -o -type d -o -type l \)

•   Search for files with the particular name needle and stop immediately when we find the first one.

    $ find / -name needle -print -quit

•   Demonstrate the interpretation of the %f and %h format directives of the -printf action for some corner-cases. Here is an example including some output.

    $ 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'arrête en renvoyant la valeur de retour 0 si tous les fichiers ont été traités avec succès, ou en renvoyant une valeur supérieure à 0 si une erreur est survenue. Cette information est volontairement très floue. Considérez simplement qu'en cas de valeur de retour différente de zéro, vous ne devez pas vous fier à l'exactitude des résultats fournis par find. When some error occurs, find may stop immediately, without completing all the actions specified. For example, some starting points may not have been examined or some pending program invocations for -exec ... {} + or -execdir ... {} + may not have been performed.

HISTORIQUE
As of findutils-4.2.2, shell metacharacters (`*', `?' or `[]' for example) used in filename patterns match a leading `.', because IEEE POSIX interpretation 126 requires this.

As of findutils-4.3.3, -perm /000 now matches all files instead of none.

La gestion des nanosecondes dans les horodatages a été implémentée dans findutils-4.3.3.

L'action -delete force find à envoyer un statut de sortie non nul en cas d'échec, à partir de findutils-4.3.11. Toutefois, find ne s'interrompra pas immédiatement. Dans les versions précédentes, l’état de sortie de find n'était pas modifié par l'échec de -delete.
Fonctionnalités | Ajoutées | Se passe aussi 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

La syntaxe -perm +MODE a été supprimée dans findutils-4.5.12, pour -perm //MODE. La syntaxe +MODE était obsolète depuis findutils-4.2.21 qui a été publié en 2005.

FAUX BOGUES

  Surprises avec la précédence d'un opérateur
La commande find . -name fichier1 -o -name fichier2 -print n'affichera jamais fichier1 car elle revient en fait à find . -name fichier1 -o \( -name fichier2 -a -print \). Rappelez-vous que la précédence de -a est supérieure à celle de -o et quand aucun opérateur n'est spécifié entre les tests, -a est présumé.

  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'interpréteur pourrait étendre le modèle *.c à plus d'un nom de fichier existant dans le répertoire actuel et le passage des noms de fichier qui en résultent à 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 prédicat -name ne permet exactement qu'un motif en argument. Plutôt que de faire comme ça, vous devriez encapsuler le motif entre des guillemets ou échapper les jokers, permettant ainsi à find d'utiliser le motif avec le joker lors de la recherche d'un nom de fichier correspondant, au lieu des noms de fichier étendus par l'interpréteur parent :
$ find . -name '*.c' -print
$ find . -name \*.c -print

BOGUES
There are security problems inherent in the behaviour that the POSIX standard specifies for find, which therefore cannot be fixed. For example, the -exec action is inherently insecure, and -execdir should be used instead.

La variable d'environnement LC_COLLATE n'a aucun effet sur l'action -ok.

SIGNALER DES BOGUES
Aide en ligne de GNU coreutils : <https://www.gnu.org/software/findutils/#get-help>
Signaler toute erreur de traduction à <https://translationproject.org/team/fr.html>

Signaler toute autre erreur au moyen du système de suivi de bogues GNU Savannah :
    <https://savannah.gnu.org/bugs/?group=findutils>
Les sujets généraux concernant le paquet GNU findutils sont discutés sur la liste de diffusion bug-findutils :
    <https://lists.gnu.org/mailman/listinfo/bug-findutils>

COPYRIGHT
Copyright © 1990-2021 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 ou supérieure <https://gnu.org/licenses/gpl.html>.
Ce programme est un logiciel libre. Vous pouvez le modifier et le redistribuer. Il n'y a AUCUNE GARANTIE dans la mesure autorisée 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)

Full documentation <https://www.gnu.org/software/findutils/find>
or available locally via: info find

TRADUCTION
La traduction française de cette page de manuel a été créée par Florentin Duneau <fduneau@gmail.com>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Sylvain Cherrier <sylvain.cherrier@free.fr>, Nicolas François <nicolas.francois@centraliens.net> et Jean-Philippe MENGUAL <jpmengual@debian.org> Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à <debian-l10n-french@lists.debian.org>.