Manuels pour la ligne de commande

Man » Manuel de find en ligne - documentation en ligne détaillée pour la page de manuel find

🌍
find - rechercher des fichiers dans une hiérarchie de répertoires

SYNOPSIS

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [point_de_départ...] [expression]

DESCRIPTION

Cette page de manuel documente la version GNU de find. GNU find recherche l'arborescence de répertoires en commençant à chaque point de départ spécifié, en évaluant l'expression donnée de gauche à droite, selon les règles de précédance (voir la section OPÉRATEURS), jusqu'à ce que le résultat soit connu (le côté gauche de l'opération « et » est faux, ou le côté gauche de l'opération « ou » est vrai), auquel cas find passe au fichier suivant. Si aucun point de départ n'est spécifié, « . » est supposé.

Si vous utilisez find dans un environnement où la sécurité est importante (par exemple, si vous l'utilisez pour rechercher des répertoires qui sont accessibles en écriture par d'autres utilisateurs), vous devez lire le chapitre « Considérations de sécurité » de la documentation findutils, qui s'intitule Finding Files et qui est fournie avec findutils. Ce document contient également beaucoup plus de détails et d'informations que cette page de manuel, vous pourriez donc le trouver plus utile.

OPTIONS

Les options -H, -L et -P contrôlent le traitement des liens symboliques. Les arguments de ligne de commande qui suivent ces options sont considérés comme des noms de fichiers ou de répertoires à examiner, jusqu'au premier argument qui commence par « - », ou l'argument « ( » ou « ! ». Cet argument et tous les arguments qui le suivent sont considérés comme l'expression décrivant ce qui doit être recherché. Si aucun chemin n'est donné, le répertoire courant est utilisé. Si aucune expression n'est donnée, l'expression -print est utilisée (mais vous devriez probablement envisager d'utiliser -print0 à la place).

Cette page de manuel traite des « options » dans la liste d'expressions. Ces options contrôlent le comportement de find mais sont spécifiées immédiatement après le dernier nom de chemin. Les cinq options « réelles » -H, -L, -P, -D et -O doivent apparaître avant le premier nom de chemin, si elles sont utilisées. Un double tiret -- pourrait théoriquement être utilisé pour indiquer que tous les arguments restants ne sont pas des options, mais cela ne fonctionne pas vraiment en raison de la manière dont find détermine la fin des arguments de chemin suivants : il le fait en lisant jusqu'à ce qu'un argument d'expression soit rencontré (qui commence également par un « - »). Maintenant, si un argument de chemin devait commencer par un « - », find le traiterait à la place comme un argument d'expression. Ainsi, pour s'assurer que tous les points de départ sont pris en compte comme tels, et surtout pour empêcher que les motifs génériques développés par le shell appelant ne soient traités par erreur comme des arguments d'expression, il est généralement plus sûr de préfixer les motifs génériques ou les noms de chemin douteux avec ./ ou d'utiliser des chemins absolus commençant par /. Alternativement, il est généralement sûr, bien que non portable, d'utiliser l'option GNU -files0-from pour transmettre des points de départ arbitraires à find.


-P     Ne jamais suivre les liens symboliques. Il s’agit du comportement par défaut. Lorsque find examine ou affiche des informations sur des fichiers, et que le fichier est un lien symbolique, les informations utilisées doivent être tirées des propriétés du lien symbolique lui-même.

-L     Suivre les liens symboliques. Lorsque find examine ou affiche des informations sur des fichiers, les informations utilisées doivent être tirées des propriétés du fichier vers lequel le lien pointe, et non du lien lui-même (sauf s’il s’agit d’un lien symbolique cassé ou si find n’est pas en mesure d’examiner le fichier vers lequel le lien pointe). L’utilisation de cette option implique -noleaf. Si vous utilisez ultérieurement l’option -P, -noleaf restera en vigueur. Si -L est en vigueur et que find découvre un lien symbolique vers un sous-répertoire pendant sa recherche, le sous-répertoire pointé par le lien symbolique sera recherché.

Lorsque l’option -L est en vigueur, le prédicat -type correspondra toujours au type du fichier vers lequel un lien symbolique pointe plutôt qu’au lien lui-même (sauf si le lien symbolique est cassé). Les actions qui peuvent entraîner la rupture des liens symboliques pendant l’exécution de find (par exemple, -delete) peuvent entraîner un comportement déroutant. L’utilisation de -L fait que les prédicats -lname et -ilname renvoient toujours false.

-H     Ne pas suivre les liens symboliques, sauf lors du traitement des arguments de la ligne de commande. Lorsque find examine ou affiche des informations sur des fichiers, les informations utilisées doivent être tirées des propriétés du lien symbolique lui-même. La seule exception à ce comportement est lorsqu’un fichier spécifié sur la ligne de commande est un lien symbolique et que le lien peut être résolu. Dans ce cas, les informations utilisées sont tirées de ce vers quoi le lien pointe (c’est-à-dire que le lien est suivi). Les informations sur le lien lui-même sont utilisées comme solution de repli si le fichier pointé par le lien symbolique ne peut pas être examiné. Si -H est en vigueur et qu’un des chemins spécifiés sur la ligne de commande est un lien symbolique vers un répertoire, le contenu de ce répertoire sera examiné (bien que -maxdepth 0 empêcherait cela).

Si plus d’une des options -H, -L et -P est spécifiée, chacune annule les autres ; la dernière option qui apparaît sur la ligne de commande est celle qui est prise en compte. Étant donné que c’est le comportement par défaut, l’option -P doit être considérée comme étant en vigueur, sauf si -H ou -L est spécifiée.

GNU find effectue fréquemment des opérations de statut sur les fichiers pendant le traitement de la ligne de commande elle-même, avant que toute recherche ne commence. Ces options affectent également la manière dont ces arguments sont traités. Plus précisément, il existe un certain nombre de tests qui comparent les fichiers répertoriés sur la ligne de commande à un fichier que nous examinons actuellement. Dans chaque cas, le fichier spécifié sur la ligne de commande aura été examiné et certaines de ses propriétés auront été sauvegardées. Si le fichier nommé est en fait un lien symbolique et que l’option -P est en vigueur (ou si ni -H ni -L n’ont été spécifiées), les informations utilisées pour la comparaison seront tirées des propriétés du lien symbolique. Sinon, elles seront tirées des propriétés du fichier vers lequel le lien pointe. Si find ne peut pas suivre le lien (par exemple, parce qu’il n’a pas les privilèges nécessaires ou que le lien pointe vers un fichier inexistant), les propriétés du lien lui-même seront utilisées.


Lorsque les options -H ou -L sont activées, tous les liens symboliques répertoriés comme argument de -newer sont résolus, et l'horodatage est extrait du fichier pointé par le lien symbolique. La même considération s'applique aux options -newerXY, -anewer et -cnewer.

L'option -follow a un effet similaire à -L, mais elle prend effet au moment où elle apparaît (c'est-à-dire, si -L n'est pas utilisé mais que -follow l'est, tous les liens symboliques apparaissant après -follow sur la ligne de commande seront résolus, et ceux qui le précèdent ne le seront pas).

-D debugopts
Affiche des informations de diagnostic ; cela peut être utile pour diagnostiquer les problèmes pour lesquels find ne fait pas ce que vous souhaitez. La liste des options de débogage doit être séparée par des virgules. La compatibilité des options de débogage n’est pas garantie entre les différentes versions de findutils. Pour obtenir la liste complète des options de débogage valides, consultez la sortie de find -D help. Les options de débogage valides incluent :

exec  Affiche des informations de diagnostic relatives aux options -exec, -execdir, -ok et -okdir.

opt  Affiche des informations de diagnostic relatives à l’optimisation de l’arborescence d’expressions ; voir l’option -O.

rates  Affiche un résumé indiquant la fréquence à laquelle chaque prédicat a réussi ou échoué.

search  Parcourt l’arborescence de répertoires de manière détaillée.

stat  Affiche des messages lorsque des fichiers sont examinés avec les appels système stat et lstat. Le programme find tente de minimiser ces appels.

tree  Affiche l’arborescence d’expressions sous sa forme originale et optimisée.

all  Active toutes les autres options de débogage (mais pas help).

help  Explique les options de débogage.

-Olevel
Active l’optimisation des requêtes. Le programme find réorganise les tests pour accélérer l’exécution tout en préservant l’effet global ; c’est-à-dire que les prédicats avec des effets secondaires ne sont pas réorganisés les uns par rapport aux autres. Les optimisations effectuées à chaque niveau d’optimisation sont les suivantes.

0  Équivalent au niveau d’optimisation 1.

1  Il s’agit du niveau d’optimisation par défaut et correspond au comportement traditionnel. Les expressions sont réorganisées de sorte que les tests basés uniquement sur les noms de fichiers (par exemple, -name et -regex) soient effectués en premier.

2  Tous les tests -type ou -xtype sont effectués après tous les tests basés uniquement sur les noms de fichiers, mais avant tous les tests qui nécessitent des informations provenant de l’inode. Sur de nombreuses versions modernes d’Unix, les types de fichiers sont renvoyés par readdir(), de sorte que ces prédicats sont plus rapides à évaluer que les prédicats qui doivent d’abord effectuer un stat sur le fichier. Si vous utilisez le prédicat -fstype FOO et spécifiez un type de système de fichiers FOO qui n’est pas connu (c’est-à-dire, présent dans /etc/mtab) au moment où find démarre, ce prédicat est équivalent à -false.

3     À ce niveau d’optimisation, l’optimiseur de requêtes basé sur les coûts est activé.
L’ordre des tests est modifié afin que les tests rapides (c’est-à-dire peu coûteux) soient effectués en premier, et les tests plus coûteux, plus tard, si nécessaire. Dans chaque plage de coûts, les prédicats sont évalués plus tôt ou plus tard en fonction de leur probabilité de succès ou d’échec. Pour -o, les prédicats susceptibles de réussir sont évalués plus tôt, et pour -a, les prédicats susceptibles d’échouer sont évalués plus tôt.

L’optimiseur basé sur les coûts a une idée fixe de la probabilité de succès de tout test donné. Dans certains cas, la probabilité tient compte de la nature spécifique du test (par exemple, -type f est supposé avoir plus de chances de réussir que -type c). L’optimiseur basé sur les coûts est actuellement en cours d’évaluation. S’il n’améliore pas réellement les performances de find, il sera supprimé. Inversement, les optimisations qui s’avèrent fiables, robustes et efficaces peuvent être activées à des niveaux d’optimisation inférieurs au fil du temps. Cependant, le comportement par défaut (c’est-à-dire le niveau d’optimisation 1) ne sera pas modifié dans la série de versions 4.3.x. La suite de tests findutils exécute tous les tests sur find à chaque niveau d’optimisation et s’assure que le résultat est le même.

Le réordonnancement des opérations effectué par l’optimiseur basé sur les coûts peut entraîner des changements de comportement perceptibles par l’utilisateur. Par exemple, les prédicats -readable et -empty sont sensibles au réordonnancement. S’ils sont exécutés dans l’ordre -empty -readable, un message d’erreur sera affiché pour les répertoires illisibles. S’ils sont exécutés dans l’ordre -readable -empty, aucun message d’erreur ne sera affiché. C’est la raison pour laquelle un tel réordonnancement des opérations n’est pas effectué au niveau d’optimisation par défaut.

EXPRESSION

La partie de la ligne de commande qui suit la liste des points de départ est l’expression. Il s’agit d’une sorte de spécification de requête qui décrit comment nous faisons correspondre les fichiers et ce que nous faisons avec les fichiers qui ont été mis en correspondance. Une expression est composée d’une séquence d’éléments :

Tests Les tests renvoient une valeur vraie ou fausse, généralement en fonction d’une propriété du fichier que nous considérons. Le test -empty, par exemple, est vrai uniquement lorsque le fichier actuel est vide.

Actions Les actions ont des effets secondaires (tels que l’impression de quelque chose sur la sortie standard) et renvoient une valeur vraie ou fausse, généralement en fonction de leur succès ou non. L’action -print, par exemple, imprime le nom du fichier actuel sur la sortie standard.

Options globales Les options globales affectent le fonctionnement des tests et des actions spécifiés dans n’importe quelle partie de la ligne de commande. Les options globales renvoient toujours la valeur vraie. L’option -depth, par exemple, fait parcourir le système de fichiers de manière récursive.

Options positionnelles Les options positionnelles affectent uniquement les tests ou les actions qui les suivent. Les options positionnelles renvoient toujours la valeur vraie. L’option -regextype, par exemple, est une option positionnelle qui spécifie le dialecte d’expression régulière pour les expressions régulières qui apparaissent plus loin dans la ligne de commande.


Opérateurs Les opérateurs joignent les autres éléments de l'expression. Ils incluent, par exemple, -o (qui signifie OU logique) et -a (qui signifie ET logique). Lorsqu'un opérateur est manquant, -a est supposé.

L'action -print est effectuée sur tous les fichiers pour lesquels l'expression entière est vraie, à moins qu'elle ne contienne une autre action que -prune ou -quit. Les actions qui inhibent l'action -print par défaut sont : -delete, -exec, -execdir, -ok, -okdir, -fls, -fprint, -fprintf, -ls, -print et -printf.

L'action -delete agit également comme une option (puisqu'elle implique -depth).

OPTIONS POSITIONNELLES

Les options positionnelles renvoient toujours vrai. Elles affectent uniquement les tests qui apparaissent ultérieurement dans la ligne de commande.

-daystart

Mesure les temps (pour -amin, -atime, -cmin, -ctime, -mmin et -mtime) à partir du début de la journée plutôt qu'à partir d'il y a 24 heures. Cette option n'affecte que les tests qui apparaissent ultérieurement dans la ligne de commande.

-follow

Obsolète ; utilisez l'option -L à la place. Dé référence les liens symboliques. Implique -noleaf. L'option -follow n'affecte que les tests qui apparaissent après elle dans la ligne de commande. À moins que l'option -H ou -L n'ait été spécifiée, la position de l'option -follow modifie le comportement du prédicat -newer ; tous les fichiers répertoriés comme argument de -newer seront déréférencés s'ils sont des liens symboliques. La même considération s'applique à -newerXY, -anewer et -cnewer. De même, le prédicat -type correspondra toujours au type du fichier vers lequel pointe un lien symbolique plutôt qu'au lien lui-même. L'utilisation de -follow fait que les prédicats -lname et -ilname renvoient toujours faux.

-regextype type

Modifie la syntaxe des expressions régulières comprise par les tests -regex et -iregex qui se produisent ultérieurement dans la ligne de commande. Pour voir quels types d'expressions régulières sont connus, utilisez -regextype help. La documentation Texinfo (voir RUBRIQUES CONNEXES) explique la signification et les différences entre les différents types d'expressions régulières. Si vous n'utilisez pas cette option, find se comporte comme si le type d'expression régulière emacs avait été spécifié.

-warn, -nowarn

Active ou désactive les messages d'avertissement. Ces avertissements ne concernent que l'utilisation de la ligne de commande, et non les conditions que find peut rencontrer lors de la recherche dans les répertoires. Le comportement par défaut correspond à -warn si l'entrée standard est un terminal, et à -nowarn dans le cas contraire. Si un message d'avertissement concernant l'utilisation de la ligne de commande est produit, le code de sortie de find n'est pas affecté. Si la variable d'environnement POSIXLY_CORRECT est définie et que -warn est également utilisé, il n'est pas précisé quels avertissements, le cas échéant, seront actifs.

OPTIONS GLOALES

Les options globales renvoient toujours vrai. Les options globales prennent effet même pour les tests qui se trouvent plus tôt dans la ligne de commande. Pour éviter toute confusion, les options globales doivent être spécifiées dans la ligne de commande après la liste des points de départ, juste avant le premier test, l'option positionnelle ou l'action. Si vous spécifiez une option globale à un autre endroit, find émettra un message d'avertissement expliquant que cela peut être source de confusion.


Les options globales sont spécifiées après la liste des points de départ et ne sont donc pas du même type que l'option -L, par exemple.

-d  Synonyme de -depth, pour la compatibilité avec FreeBSD, NetBSD, MacOS X et OpenBSD.

-depth  Traiter le contenu de chaque répertoire avant le répertoire lui-même. L'action -delete implique également l'option -depth.

-files0-from file
Lire les points de départ à partir du fichier au lieu de les obtenir sur la ligne de commande. Contrairement aux limitations connues du passage des points de départ via des arguments sur la ligne de commande, à savoir la limitation du nombre de noms de fichiers et l'ambiguïté inhérente des noms de fichiers qui entrent en conflit avec les noms d'options, l'utilisation de cette option permet de passer en toute sécurité un nombre arbitraire de points de départ à find.

L'utilisation de cette option et le passage des points de départ sur la ligne de commande sont mutuellement exclusifs et ne sont donc pas autorisés en même temps.

L'argument de fichier est obligatoire. On peut utiliser -files0-from - pour lire la liste des points de départ à partir du flux d'entrée standard, par exemple à partir d'un pipe. Dans ce cas, les actions -ok et -okdir ne sont pas autorisées, car elles interféreraient manifestement avec la lecture à partir de l'entrée standard afin d'obtenir une confirmation de l'utilisateur.

Les points de départ dans le fichier doivent être séparés par des caractères NUL ASCII. Deux caractères NUL consécutifs, c'est-à-dire un point de départ avec un nom de fichier de longueur nulle, ne sont pas autorisés et entraîneront un message d'erreur suivi d'un code de sortie non nul ultérieurement.

Si le fichier donné est vide, find ne traite aucun point de départ et se termine donc immédiatement après l'analyse des arguments du programme. Cela contraste avec l'invocation standard où find suppose que le répertoire courant est le point de départ si aucun argument de chemin n'est passé.

Le traitement des points de départ est sinon normal, par exemple find parcourra les sous-répertoires, sauf si cela est empêché. Pour traiter uniquement les points de départ, on peut également passer l'option -maxdepth 0.

Remarques supplémentaires : si un fichier est répertorié plus d'une fois dans le fichier d'entrée, il n'est pas précisé s'il est visité plus d'une fois. Si le fichier est modifié pendant l'opération de find, le résultat n'est pas non plus précisé. Enfin, la position de la recherche dans le fichier nommé au moment où find se termine, que ce soit avec -quit ou d'une autre manière, n'est pas non plus précisée. Par "non spécifié", on entend que cela peut ou non fonctionner ou faire quelque chose de spécifique, et que le comportement peut changer d'une plateforme à l'autre, ou d'une version de findutils à l'autre.

-help, --help
Afficher un résumé de l'utilisation de la ligne de commande de find et quitter.

-ignore_readdir_race
Normalement, find émet un message d'erreur lorsqu'il ne parvient pas à obtenir les informations sur un fichier. Si vous utilisez cette option et qu'un fichier est supprimé entre le moment où find lit le nom du fichier dans le répertoire et le moment où il tente d'obtenir les informations sur le fichier, aucun message d'erreur ne sera émis. Cela s'applique également aux fichiers ou répertoires dont les noms sont donnés sur la ligne de commande. Cette option prend effet au moment où la ligne de commande est lue, ce qui signifie que vous ne pouvez pas rechercher une partie du système de fichiers avec cette option activée et une autre partie avec cette option désactivée (si vous devez le faire, vous devrez exécuter deux commandes find, une avec l'option et une sans).

De plus, l'utilisation de l'option -ignore_readdir_race avec find ignorera les erreurs de l'action -delete dans le cas où le fichier a disparu depuis que le répertoire parent a été lu : elle ne produira pas de message d'erreur et le code de retour de l'action -delete sera true.

-maxdepth levels

Descend au maximum levels (un entier non négatif) niveaux de répertoires à partir des points de départ. L'utilisation de -maxdepth 0 signifie que les tests et les actions ne sont appliqués qu'aux points de départ eux-mêmes.

-mindepth levels

N'applique aucun test ou action aux niveaux inférieurs à levels (un entier non négatif). L'utilisation de -mindepth 1 signifie que tous les fichiers, à l'exception des points de départ, sont traités.

-mount Ne pas descendre dans les répertoires situés sur d'autres systèmes de fichiers. Un nom alternatif pour `-xdev`, pour la compatibilité avec certaines autres versions de `find`.

-noignore_readdir_race

Désactive l'effet de -ignore_readdir_race.

-noleaf

Ne pas optimiser en supposant que les répertoires contiennent 2 liens directs de moins que leur nombre de liens physiques. Cette option est nécessaire lors de la recherche dans des systèmes de fichiers qui ne respectent pas la convention Unix sur les liens de répertoires, tels que les systèmes de fichiers CD-ROM ou MS-DOS ou les points de montage de volumes AFS. Chaque répertoire d'un système de fichiers Unix normal possède au moins 2 liens directs : son nom et son entrée .. De plus, ses sous-répertoires (s'il y en a) ont chacun une entrée .. liée à ce répertoire. Lorsque find examine un répertoire, après avoir vérifié 2 liens directs de moins que le nombre de liens du répertoire, il sait que le reste des entrées dans le répertoire ne sont pas des répertoires (des fichiers « feuilles » dans l'arborescence du répertoire). Si seuls les noms des fichiers doivent être examinés, il n'est pas nécessaire de les vérifier ; cela permet d'augmenter considérablement la vitesse de recherche.

-version, --version

Affiche le numéro de version de find et quitte.

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

TESTS

Certains tests, par exemple -newerXY et -samefile, permettent de comparer le fichier actuellement examiné avec un fichier de référence spécifié sur la ligne de commande. Lorsque ces tests sont utilisés, l'interprétation du fichier de référence est déterminée par les options -H, -L et -P et toutes les options -follow précédentes, mais le fichier de référence n'est examiné qu'une seule fois, au moment de l'analyse de la ligne de commande. Si le fichier de référence ne peut pas être examiné (par exemple, si l'appel système stat(2) échoue pour ce fichier), un message d'erreur est affiché et find quitte avec un code de retour différent de zéro.


Un argument numérique n peut être spécifié pour les tests (comme -amin, -mtime, -gid, -inum, -links, -size, -uid et -used) comme suit :

+n    pour une valeur supérieure à n,

-n    pour une valeur inférieure à n,

n    pour une valeur exactement égale à n.

Tests pris en charge :

-amin n

Le fichier a été consulté il y a moins de, plus de ou exactement n minutes.

-anewer référence

La date de la dernière consultation du fichier actuel est plus récente que la date de la dernière modification des données du fichier de référence. Si la référence est un lien symbolique et que l’option -H ou l’option -L est activée, la date de la dernière modification des données du fichier vers lequel il pointe est toujours utilisée.

-atime n

Le fichier a été consulté il y a moins de, plus de ou exactement n * 24 heures. Lorsque find détermine le nombre de périodes de 24 heures écoulées depuis la dernière consultation du fichier, toute partie fractionnaire est ignorée, de sorte que pour correspondre à -atime +1, un fichier doit avoir été consulté il y a au moins deux jours.

-cmin n

Le statut du fichier a été modifié il y a moins de, plus de ou exactement n minutes.

-cnewer référence

La date de la dernière modification du statut du fichier actuel est plus récente que la date de la dernière modification des données du fichier de référence. Si la référence est un lien symbolique et que l’option -H ou l’option -L est activée, la date de la dernière modification des données du fichier vers lequel il pointe est toujours utilisée.

-ctime n

Le statut du fichier a été modifié il y a moins de, plus de ou exactement n * 24 heures. Voir les commentaires pour -atime afin de comprendre comment l’arrondi affecte l’interprétation des heures de modification du statut du fichier.

-empty Le fichier est vide et est soit un fichier régulier, soit un répertoire.

-executable

Correspond aux fichiers qui sont exécutables et aux répertoires qui sont consultables (dans un sens de résolution de nom de fichier) par l’utilisateur actuel. Cela prend en compte les listes de contrôle d’accès et les autres artefacts de permissions que le test -perm ignore. Ce test utilise l’appel système access(2), et peut donc être trompé par les serveurs NFS qui effectuent un mappage d’UID (ou un « rootsquashing »), car de nombreux systèmes implémentent access(2) dans le noyau du client et ne peuvent donc pas utiliser les informations de mappage d’UID stockées sur le serveur. Étant donné que ce test est basé uniquement sur le résultat de l’appel système access(2), il n’y a aucune garantie qu’un fichier pour lequel ce test réussit puisse réellement être exécuté.

-false Toujours faux.

-fstype type

Le fichier se trouve sur un système de fichiers de type type. Les types de systèmes de fichiers valides varient selon les différentes versions d’Unix. Voici une liste incomplète des types de systèmes de fichiers qui sont acceptés sur une version d’Unix ou une autre : ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Vous pouvez utiliser -printf avec la directive %F pour afficher les types de vos systèmes de fichiers.

-gid n

L’ID de groupe numérique du fichier est inférieur, supérieur ou exactement égal à n.

-group gname

Le fichier appartient au groupe gname (ID de groupe numérique autorisé).

-ilname pattern

Comme -lname, mais la correspondance n’est pas sensible à la casse. Si l’option -L ou l’option -follow est activée, ce test renvoie faux à moins que le lien symbolique ne soit rompu.


-iname motif

Comme -name, mais la comparaison n’est pas sensible à la casse. Par exemple, les motifs fo* et F?? correspondent aux noms de fichiers Foo, FOO, foo, fOo, etc. Le motif *foo* correspondra également à un fichier appelé .foobar.

-inum n

Le fichier a un numéro d’inode inférieur, supérieur ou égal à n. Il est généralement plus facile d’utiliser le test -samefile.

-ipath motif

Comme -path, mais la comparaison n’est pas sensible à la casse.

-iregex motif

Comme -regex, mais la comparaison n’est pas sensible à la casse.

-iwholename motif

Voir -ipath. Cette alternative est moins portable que -ipath.

-links n

Le fichier a moins, plus ou exactement n liens physiques.

-lname motif

Le fichier est un lien symbolique dont le contenu correspond au motif de shell motif. Les métacaractères ne traitent pas \ ou . de manière spéciale. Si l’option -L ou l’option -follow est activée, ce test renvoie faux à moins que le lien symbolique ne soit interrompu.

-mmin n

Les données du fichier ont été modifiées pour la dernière fois il y a moins, plus ou exactement n minutes.

-mtime n

Les données du fichier ont été modifiées pour la dernière fois il y a moins, plus ou exactement n * 24 heures. Voir les commentaires pour -atime afin de comprendre comment l’arrondi affecte l’interprétation des heures de modification des fichiers.

-name motif

La base du nom de fichier (le chemin avec les répertoires de tête supprimés) correspond au motif de shell motif. Étant donné que les répertoires de tête des noms de fichiers sont supprimés, le motif ne doit pas inclure une barre oblique, car -name a/b ne correspondra jamais à quoi que ce soit (et vous voudrez probablement utiliser -path à la place). Une exception à ceci est l’utilisation d’une simple barre oblique comme motif (-name /), car il s’agit d’une chaîne valide pour faire correspondre le répertoire racine / (car la base du nom de / est /). Un avertissement est émis si vous essayez de passer un motif contenant une barre oblique (mais ne consistant pas uniquement en une barre oblique), sauf si la variable d’environnement POSIXLY_CORRECT est définie ou si l’option -nowarn est utilisée.

Pour ignorer un répertoire et les fichiers qu’il contient, utilisez -prune au lieu de vérifier chaque fichier de l’arborescence ; voir un exemple dans la description de cette action. Les accolades ne sont pas reconnues comme étant spéciales, bien que certains shells, notamment Bash, confèrent une signification spéciale aux accolades dans les motifs de shell. La correspondance des noms de fichiers est effectuée à l’aide de la fonction de bibliothèque fnmatch(3). N’oubliez pas d’encadrer le motif entre guillemets afin de le protéger contre l’expansion par le shell.

-newer référence

L’heure de la dernière modification des données du fichier actuel est plus récente que celle de la dernière modification des données du fichier de référence. Si référence est un lien symbolique et que l’option -H ou l’option -L est activée, l’heure de la dernière modification des données du fichier vers lequel il pointe est toujours utilisée.

-newerXY référence

Réussit si l’horodatage X du fichier considéré est plus récent que l’horodatage Y du fichier référence. Les lettres X et Y peuvent être n’importe laquelle des lettres suivantes :


a   Le temps d'accès du fichier référencé.
B   Le temps de création du fichier référencé.
c   Le temps de modification de l'inode de la référence.
m   Le temps de modification du fichier référencé.
t   La référence est interprétée directement comme une heure.

Certaines combinaisons sont invalides ; par exemple, il est invalide que X soit t. Certaines combinaisons ne sont pas prises en charge sur tous les systèmes ; par exemple, B n'est pas pris en charge sur tous les systèmes. Si une combinaison XY invalide ou non prise en charge est spécifiée, une erreur fatale se produit. Les spécifications de temps sont interprétées comme pour l'argument de l'option -d de GNU date. Si vous essayez d'utiliser le temps de création d'un fichier de référence, et que le temps de création ne peut pas être déterminé, un message d'erreur fatal s'affiche. Si vous spécifiez un test qui fait référence au temps de création des fichiers examinés, ce test échouera pour tous les fichiers dont le temps de création est inconnu.

-nogroup

Aucun groupe ne correspond à l'ID de groupe numérique du fichier.

-nouser

Aucun utilisateur ne correspond à l'ID d'utilisateur numérique du fichier.

-path motif

Le nom de fichier correspond au motif shell motif. Les métacaractères ne traitent pas /' ou.' de manière spéciale ; par exemple, find . -path "./sr*sc" affichera une entrée pour un répertoire appelé ./src/misc (si un tel répertoire existe). Pour ignorer un arbre de répertoires entier, utilisez -prune plutôt que de vérifier chaque fichier de l'arbre. Notez que le test de correspondance de motif s'applique à l'ensemble du nom de fichier, en commençant par l'un des points de départ spécifiés dans la ligne de commande. Il n'aurait que peu de sens d'utiliser un nom de chemin absolu ici si le point de départ pertinent est également un chemin absolu. Cela signifie que cette commande ne correspondra jamais à rien : find bar -path /foo/bar/myfile -print Find compare l'argument -path avec la concaténation d'un nom de répertoire et du nom de base du fichier qu'il examine. Puisque la concaténation ne se terminera jamais par une barre oblique, les arguments -path se terminant par une barre oblique ne correspondront à rien (à l'exception peut-être d'un point de départ spécifié dans la ligne de commande). Le prédicat -path est également pris en charge par HP-UX find et fait partie de la norme POSIX 2008.

-perm mode

Les bits de permission du fichier sont exactement mode (octal ou symbolique). Étant donné qu'une correspondance exacte est requise, si vous souhaitez utiliser cette forme pour les modes symboliques, vous devrez peut-être spécifier une chaîne de mode assez complexe. Par exemple, -perm g=w ne correspondra qu'aux fichiers qui ont le mode 0020 (c'est-à-dire, ceux pour lesquels la permission d'écriture de groupe est la seule permission définie). Il est plus probable que vous souhaitiez utiliser les formes '/' ou '-', par exemple -perm -g=w, qui correspond à tout fichier disposant de la permission d'écriture de groupe. Voir la section EXEMPLES pour quelques exemples illustratifs.

-perm -mode

Tous les bits de permission mode sont définis pour le fichier. Les modes symboliques sont acceptés dans cette forme, et c'est généralement la manière dont vous souhaiterez les utiliser. Vous devez spécifier u, g ou o si vous utilisez un mode symbolique. Voir la section EXEMPLES pour quelques exemples illustratifs.

-perm /mode

N'importe quel bit de permission mode est défini pour le fichier. Les modes symboliques sont acceptés dans cette forme. Vous devez spécifier u, g ou o si vous utilisez un mode symbolique. Voir la section EXEMPLES pour quelques exemples illustratifs. Si aucun bit de permission dans mode n'est défini, ce test correspond à n'importe quel fichier (l'idée ici est d'être cohérent avec le comportement de -perm -000).


-perm +mode
Cette option n’est plus prise en charge (et a été dépréciée depuis 2005). Utilisez plutôt -perm /mode.

-readable
Correspond aux fichiers qui sont lisibles par l’utilisateur actuel. Cela prend en compte les listes de contrôle d’accès et autres artefacts de permissions que le test -perm ignore. Ce test utilise l’appel système access(2) et peut donc être trompé par les serveurs NFS qui effectuent une correspondance des UID (ou un écrêtage des utilisateurs root), car de nombreux systèmes implémentent access(2) dans le noyau du client et ne peuvent donc pas utiliser les informations de correspondance des UID stockées sur le serveur.

-regex pattern
Le nom du fichier correspond à l’expression régulière pattern. Il s’agit d’une correspondance sur l’ensemble du chemin, et non d’une recherche. Par exemple, pour faire correspondre un fichier nommé ./fubar3, vous pouvez utiliser l’expression régulière `.*bar.' ou `.*b.*3', mais pas `f.*r3'. Les expressions régulières prises en charge par find sont par défaut les expressions régulières Emacs, mais cela peut être modifié avec l’option -regextype.

-samefile name
Le fichier fait référence au même inode que name. Lorsque l’option -L est active, cela peut inclure les liens symboliques.

-size n[cwbkMG]
Le fichier utilise moins de, plus de ou exactement n unités d’espace, en arrondissant au supérieur. Les suffixes suivants peuvent être utilisés :

`b' pour les blocs de 512 octets (c’est la valeur par défaut si aucun suffixe n’est utilisé)

`c' pour les octets

`w' pour les mots de deux octets

`k' pour les kibioctets (KiB, unités de 1024 octets)

`M' pour les mébioctets (MiB, unités de 1024 * 1024 = 1 048 576 octets)

`G' pour les gibioctets (GiB, unités de 1024 * 1024 * 1024 = 1 073 741 824 octets)

La taille est simplement le membre st_size de la structure stat remplie par l’appel système lstat (ou stat), arrondi comme indiqué ci-dessus. En d’autres termes, elle est cohérente avec le résultat que vous obtenez avec ls -l. N’oubliez pas que les spécificateurs de format `%k' et `%b' de -printf gèrent les fichiers clairsemés différemment. Le suffixe `b' désigne toujours des blocs de 512 octets et jamais des blocs de 1 024 octets, ce qui est différent du comportement de -ls.

Les préfixes + et - signifient supérieur à et inférieur à, comme d’habitude ; c’est-à-dire qu’une taille exacte de n unités ne correspond pas. N’oubliez pas que la taille est arrondie à l’unité supérieure. Par conséquent, -size -1M ne correspond pas à -size -1048576c. Le premier ne correspond qu’aux fichiers vides, tandis que le second correspond aux fichiers de 0 à 1 048 575 octets.

-true
Toujours vrai.

-type c
Le fichier est de type c :

b bloc (spécial tamponné)

c caractère (spécial non tamponné)

d répertoire

p tube nommé (FIFO)

f fichier normal

l lien symbolique ; cela n’est jamais vrai si l’option -L ou l’option -follow est active, à moins que le lien symbolique ne soit brisé. Si vous souhaitez rechercher des liens symboliques lorsque -L est actif, utilisez -xtype.

s      socket

D      door (Solaris)

Pour rechercher plusieurs types à la fois, vous pouvez fournir la liste combinée des lettres de type séparées par une virgule , (extension GNU).

-uid n Le numéro d'utilisateur (UID) numérique du fichier est inférieur, supérieur ou égal à n.

-used n

Le fichier a été consulté pour la dernière fois il y a moins, plus ou exactement n jours après que son statut a été modifié pour la dernière fois.

-user uname

Le fichier appartient à l'utilisateur uname (UID numérique autorisé).

-wholename pattern

Voir -path. Cette alternative est moins portable que -path.

-writable

Correspond aux fichiers qui sont accessibles en écriture par l'utilisateur actuel. Cela prend en compte les listes de contrôle d'accès et les autres artefacts de permissions que le test -perm ignore. Ce test utilise l'appel système access(2) et peut donc être trompé par les serveurs NFS qui effectuent un mappage d'UID (ou une suppression des privilèges root), car de nombreux systèmes implémentent access(2) dans le noyau du client et ne peuvent donc pas utiliser les informations de mappage d'UID stockées sur le serveur.

-xtype c

Identique à -type, sauf si le fichier est un lien symbolique. Pour les liens symboliques : si l'option -H ou -P a été spécifiée, cela renvoie vrai si le fichier est un lien vers un fichier du type c ; si l'option -L a été donnée, cela renvoie vrai si c est l. En d'autres termes, pour les liens symboliques, -xtype vérifie le type du fichier vers lequel -type ne vérifie pas. Si un lien symbolique est interrompu (parce que l'élément vers lequel il pointe n'existe pas ou que le lien pointe vers lui-même), -xtype se comportera de la même manière que -type.

-context pattern
(SELinux uniquement) Le contexte de sécurité du fichier correspond au modèle glob.

ACTIONS

-delete

Supprime les fichiers ou les répertoires ; renvoie vrai si la suppression a réussi. Si la suppression a échoué, un message d'erreur est affiché et le code de sortie de find sera différent de zéro (lorsqu'il se terminera).

Attention : n'oubliez pas que find évalue la ligne de commande comme une expression, de sorte que la mise de -delete en premier fera que find tentera de supprimer tout ce qui se trouve sous les points de départ que vous avez spécifiés.

L'utilisation de l'action -delete sur la ligne de commande active automatiquement l'option -depth. À son tour, -depth rend -prune inefficace, de sorte que l'action -delete ne peut pas être utilisée de manière significative avec -prune.

Souvent, l'utilisateur peut vouloir tester une ligne de commande find avec -print avant d'ajouter -delete pour l'exécution de suppression réelle. Pour éviter des résultats surprenants, il est généralement préférable de se souvenir d'utiliser -depth explicitement pendant ces premières exécutions de test.

L'action -delete ne supprimera pas un répertoire, sauf s'il est vide.

En conjonction avec l'option -ignore_readdir_race, find ignorera les erreurs de l'action -delete dans le cas où le fichier a disparu depuis que le répertoire parent a été lu : il n'affichera pas de message d'erreur, ne modifiera pas le code de sortie pour qu'il soit différent de zéro, et le code de retour de l'action -delete sera vrai.

-exec command ;

Exécute la commande ; renvoie vrai si le statut est 0. Tous les arguments suivants à find sont considérés comme des arguments de la commande jusqu'à ce qu'un argument composé de ; soit rencontré. La chaîne {} est remplacée par le nom du fichier actuel traité partout où elle apparaît dans les arguments de la commande, et pas seulement dans les arguments où elle se trouve seule, comme dans certaines versions de find. Les deux constructions peuvent avoir besoin d'être échappées (avec \) ou placées entre guillemets pour les protéger de l'expansion par le shell. Voir la section EXEMPLES pour des exemples d'utilisation de l'option -exec. La commande spécifiée est exécutée une fois pour chaque fichier correspondant. La commande est exécutée dans le répertoire de départ. Il existe des problèmes de sécurité inhérents à l'utilisation de l'action -exec ; vous devriez utiliser l'option -execdir à la place.


-exec commande {} +

Cette variante de l'action -exec exécute la commande spécifiée sur les fichiers sélectionnés, mais la ligne de commande est construite en ajoutant le nom de chaque fichier sélectionné à la fin ; le nombre total d'invocations de la commande sera donc bien inférieur au nombre de fichiers correspondants. La ligne de commande est construite de la même manière que xargs construit ses lignes de commande. Seule une instance de {} est autorisée dans la commande, et elle doit apparaître à la fin, juste avant le + ; elle doit être échappée (avec un \) ou placée entre guillemets pour la protéger de l’interprétation par le shell. La commande est exécutée dans le répertoire de départ. Si une invocation avec la forme + renvoie une valeur de sortie non nulle, find renvoie une valeur de sortie non nulle. Si find rencontre une erreur, cela peut parfois entraîner une sortie immédiate, de sorte que certaines commandes en attente peuvent ne pas être exécutées du tout. Pour cette raison, -exec ma-commande ... {} + -quit peut ne pas entraîner l’exécution réelle de ma-commande. Cette variante de -exec renvoie toujours vrai.

-execdir commande ;

-execdir commande {} +

Similaire à -exec, mais la commande spécifiée est exécutée à partir du sous-répertoire contenant le fichier correspondant, ce qui n’est généralement pas le répertoire dans lequel vous avez lancé find. Comme avec -exec, le {} doit être placé entre guillemets si find est invoqué à partir d’un shell. Il s’agit d’une méthode beaucoup plus sûre pour invoquer des commandes, car elle évite les conditions de concurrence lors de la résolution des chemins d’accès aux fichiers correspondants. Comme pour l’action -exec, la forme + de -execdir va construire une ligne de commande pour traiter plus d’un fichier correspondant, mais chaque invocation donnée de commande ne listera que les fichiers qui existent dans le même sous-répertoire. Si vous utilisez cette option, vous devez vous assurer que votre variable d’environnement PATH ne fait pas référence à « . » ; sinon, un attaquant peut exécuter toutes les commandes qu’il souhaite en laissant un fichier approprié dans un répertoire dans lequel vous exécuterez -execdir. La même chose s’applique à la présence d’entrées dans PATH qui sont vides ou qui ne sont pas des noms de répertoire absolus. Si une invocation avec la forme + renvoie une valeur non nulle, find renvoie une valeur non nulle. Si find rencontre une erreur, cela peut parfois entraîner une sortie immédiate, de sorte que certaines commandes en attente peuvent ne pas être exécutées du tout. Le résultat de l’action dépend de l’utilisation de la forme + ou de la forme ; ; -execdir commande {} + renvoie toujours vrai, tandis que -execdir commande {} ; renvoie vrai uniquement si commande renvoie 0.


-fls fichier

Vrai ; similaire à -ls, mais écrit dans un fichier, comme -fprint. Le fichier de sortie est toujours créé, même si le prédicat n’est jamais satisfait. Voir la section FILENAMES INHABITUELS pour plus d’informations sur la façon dont les caractères inhabituels dans les noms de fichiers sont gérés.

-fprint fichier

Vrai ; imprime le nom de fichier complet dans le fichier fichier. Si le fichier n’existe pas lorsque find est exécuté, il est créé ; s’il existe, il est tronqué. Les noms de fichiers /dev/stdout et /dev/stderr sont traités de manière spéciale ; ils font référence à la sortie standard et à la sortie d’erreur standard, respectivement. Le fichier de sortie est toujours créé, même si le prédicat n’est jamais satisfait. Voir la section FILENAMES INHABITUELS pour plus d’informations sur la façon dont les caractères inhabituels dans les noms de fichiers sont gérés.

-fprint0 fichier

Vrai ; similaire à -print0, mais écrit dans un fichier comme -fprint. Le fichier de sortie est toujours créé, même si le prédicat n’est jamais satisfait. Voir la section FILENAMES INHABITUELS pour plus d’informations sur la façon dont les caractères inhabituels dans les noms de fichiers sont gérés.

-fprintf fichier format

Vrai ; similaire à -printf, mais écrit dans un fichier comme -fprint. Le fichier de sortie est toujours créé, même si le prédicat n’est jamais satisfait. Voir la section FILENAMES INHABITUELS pour plus d’informations sur la façon dont les caractères inhabituels dans les noms de fichiers sont gérés.

-ls Vrai ; liste le fichier courant au format ls -dils sur la sortie standard. Les comptages de blocs sont en blocs de 1 Ko, sauf si la variable d’environnement POSIXLY_CORRECT est définie, auquel cas des blocs de 512 octets sont utilisés. Voir la section FILENAMES INHABITUELS pour plus d’informations sur la façon dont les caractères inhabituels dans les noms de fichiers sont gérés.

-ok commande ;

Similaire à -exec mais demande à l’utilisateur au préalable. Si l’utilisateur accepte, exécute la commande. Sinon, renvoie simplement faux. Si la commande est exécutée, son entrée standard est redirigée depuis /dev/null. Cette action ne peut pas être spécifiée en même temps que l’option -files0-from.

La réponse à l’invite est comparée à une paire d’expressions régulières pour déterminer si elle constitue une réponse affirmative ou négative. Cette expression régulière est obtenue à partir du système si la variable d’environnement POSIXLY_CORRECT est définie, ou sinon, à partir des traductions de messages de `find`. Si le système n’a pas de définition appropriée, la définition propre à `find` sera utilisée. Dans les deux cas, l’interprétation de l’expression régulière elle-même sera affectée par les variables d’environnement LC_CTYPE (classes de caractères) et LC_COLLATE (plages de caractères et classes d’équivalence).

-okdir commande ;

Similaire à -execdir mais demande à l’utilisateur au préalable, de la même manière que pour -ok. Si l’utilisateur n’est pas d’accord, renvoie simplement faux. Si la commande est exécutée, son entrée standard est redirigée depuis /dev/null. Cette action ne peut pas être spécifiée en même temps que l’option -files0-from.

-print Vrai ; imprime le nom de fichier complet sur la sortie standard, suivi d’un saut de ligne. Si vous transmettez la sortie de `find` à un autre programme et qu’il existe la moindre possibilité que les fichiers que vous recherchez contiennent un saut de ligne, vous devriez sérieusement envisager d’utiliser l’option -print0 au lieu de -print. Voir la section FILENAMES INHABITUELS pour plus d’informations sur la façon dont les caractères inhabituels dans les noms de fichiers sont gérés.

-print0

Vrai ; affiche le nom complet du fichier sur la sortie standard, suivi d’un caractère nul (au lieu du caractère de nouvelle ligne utilisé par -print). Cela permet aux noms de fichiers contenant des nouvelles lignes ou d’autres types d’espaces blancs d’être correctement interprétés par les programmes qui traitent la sortie de find. Cette option correspond à l’option -0 de xargs.

-printf format

Vrai ; affiche format sur la sortie standard, en interprétant les séquences d’échappement \ et les directives %. Les largeurs et les précisions des champs peuvent être spécifiées comme dans la fonction C printf(3). Veuillez noter que de nombreux champs sont affichés sous forme de %s plutôt que de %d, ce qui peut signifier que les indicateurs ne fonctionnent pas comme vous vous y attendriez. Cela signifie également que l’indicateur - fonctionne (il force l’alignement à gauche des champs). Contrairement à -print, -printf n’ajoute pas de nouvelle ligne à la fin de la chaîne. Les séquences d’échappement et les directives sont les suivantes :

\a   Signal sonore.

\b   Retour arrière.

\c   Arrête immédiatement l’impression à partir de ce format et vide la sortie.

\f   Saut de page.

\n   Nouvelle ligne.

\r   Retour chariot.

\t   Tabulation horizontale.

\v   Tabulation verticale.

\0   Caractère ASCII NUL.

\\   Une barre oblique inverse littérale (`\`).

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

Un caractère `\` suivi de tout autre caractère est traité comme un caractère ordinaire, et les deux sont affichés.

%%   Un signe de pourcentage littéral.

%a   Date du dernier accès au fichier, au format renvoyé par la fonction C `ctime(3)`.

%Ak   Date du dernier accès au fichier, au format spécifié par `k`, qui est soit `@`, soit une directive pour la fonction C `strftime(3)`. Ce qui suit présente une liste incomplète des valeurs possibles pour `k`. Veuillez consulter la documentation de `strftime(3)` pour obtenir la liste complète. Certains des caractères de spécification de conversion peuvent ne pas être disponibles sur tous les systèmes, en raison de différences dans l’implémentation de la fonction de bibliothèque `strftime(3)`.

@   Secondes écoulées depuis le 1er janvier 1970, 00 h 00, GMT, avec la partie fractionnaire.

Champs de temps :

H   Heure (00..23)

I   Heure (01..12)

k   Heure (0..23)

l   Heure (1..12)

M   Minute (00..59)

p   Indicateur AM ou PM de la locale.

r   Heure, format 12 h (hh:mm:ss [AP]M)

S   Seconde (00.00 .. 61.00). Il y a une partie fractionnaire.

T   Heure, format 24 h (hh:mm:ss.xxxxxxxxxx)

+   Date et heure, séparées par un `+`, par exemple `2004-04-28+22:22:05.0`. Il s’agit d’une extension GNU. L’heure est donnée dans le fuseau horaire actuel (qui peut être affecté en définissant la variable d’environnement TZ). Le champ des secondes inclut une partie fractionnaire.

X   Représentation de l’heure de la locale (H:M:S). Le champ des secondes inclut une partie fractionnaire.

Z   Fuseau horaire (par exemple, EDT), ou rien si aucun fuseau horaire ne peut être déterminé.

Champs de date :

a    jour de la semaine abrégé (dim..sam)

A    jour de la semaine complet, longueur variable (dimanche..samedi)

b    mois abrégé (jan..déc)

B    mois complet, longueur variable (janvier..décembre)

c    date et heure, format local (sam. nov. 04 12:02:33 EST 1989). Le format 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 fractionnaire dans le champ des secondes.

d    jour du mois (01..31)

D    date (mm/jj/aa)

F    date (aaaa-mm-jj)

h    identique à b

j    jour de l’année (001..366)

m    mois (01..12)

U    numéro de semaine de l’année, le dimanche étant le premier jour de la semaine (00..53)

w    jour de la semaine (0..6)

W    numéro de semaine de l’année, le lundi étant le premier jour de la semaine (00..53)

x    représentation de la date, format local (mm/jj/aa)

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

Y    année (1970...)

%b   quantité d’espace disque utilisée par ce fichier en blocs de 512 octets. Comme l’espace disque est alloué en multiples de la taille de bloc du système de fichiers, cette valeur est généralement supérieure à %s/512, mais elle peut également être inférieure si le fichier est un fichier épars.

%Bk   date de création du fichier, c’est-à-dire son heure de création, dans le format spécifié par k, qui est le même que pour %A. Cette directive produit une chaîne vide si le système d’exploitation ou le système de fichiers sous-jacent ne prend pas en charge les heures de création.

%c   date du dernier changement d’état du fichier dans le format renvoyé par la fonction C ctime(3).

%Ck   date du dernier changement d’état du fichier dans le format spécifié par k, qui est le même que pour %A.

%d   profondeur du fichier dans l’arborescence des répertoires ; 0 signifie que le fichier est un point de départ.

%D   numéro de périphérique sur lequel le fichier existe (le champ st_dev de la structure stat), en décimal.

%f   affiche le nom de base ; le nom du fichier sans les répertoires principaux (uniquement le dernier élément). Pour /, le résultat est /. Voir la section EXEMPLES pour un exemple.

%F   type du système de fichiers sur lequel se trouve le fichier ; cette valeur peut être utilisée pour -fstype.

%g   nom du groupe du fichier ou ID de groupe numérique si le groupe n’a pas de nom.

%G   ID de groupe numérique du fichier.

%h   répertoires principaux ; les répertoires principaux du nom du fichier (tout sauf le dernier élément). Si le nom du fichier ne contient pas de barres obliques (car il se trouve dans le répertoire courant), le spécificateur %h se développe en « . ». Pour les fichiers qui sont eux-mêmes des répertoires et qui contiennent une barre oblique (y compris /), %h se développe en une chaîne vide. Voir la section EXEMPLES pour un exemple.

%H   point de départ sous lequel le fichier a été trouvé.

%i   numéro d’i-noeud du fichier (en décimal).

%k   quantité d’espace disque utilisée par ce fichier en blocs de 1 Ko. Comme l’espace disque est alloué en multiples de la taille de bloc du système de fichiers, cette valeur est généralement supérieure à %s/1024, mais elle peut également être inférieure si le fichier est un fichier épars.

%l   objet du lien symbolique (chaîne vide si le fichier n’est pas un lien symbolique).

%m   bits de permission du fichier (en octal). Cette option utilise les nombres « traditionnels » que la plupart des implémentations Unix utilisent, mais si votre implémentation particulière utilise un ordre inhabituel des bits de permission octale, vous verrez une différence entre la valeur réelle du mode du fichier et la sortie de %m. Normalement, vous voudrez avoir un zéro en tête dans ce nombre, et pour ce faire, vous devez utiliser le drapeau # (par exemple, `%#m`).

%M  Permissions du fichier (sous forme symbolique, comme pour ls). Cette directive est prise en charge dans findutils 4.2.5 et versions ultérieures.

%n  Nombre de liens physiques vers le fichier.

%p  Nom du fichier.

%P  Nom du fichier, après suppression du nom du point de départ à partir duquel il a été trouvé.

%s  Taille du fichier en octets.

%S  Indice de sparsité du fichier. Il est calculé comme (BLOCKSIZE * st_blocks / st_size). La valeur exacte que vous obtiendrez pour un fichier ordinaire d’une certaine longueur est dépendante du système. Cependant, en général, les fichiers creux auront des valeurs inférieures à 1.0, et les fichiers qui utilisent des blocs indirects peuvent avoir 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 utilisée pour BLOCKSIZE dépend du système, mais est généralement de 512 octets. Si la taille du fichier est nulle, la valeur affichée n’est pas définie. Sur les systèmes qui ne prennent pas en charge st_blocks, la sparsité d’un fichier est supposée être de 1.0.

%t  Heure de la dernière modification du fichier, dans le format renvoyé par la fonction C ctime(3).

%Tk Heure de la dernière modification du fichier, dans le format spécifié par k, qui est le même que pour %A.

%u  Nom d’utilisateur du fichier, ou ID numérique de l’utilisateur si l’utilisateur n’a pas de nom.

%U  ID numérique de l’utilisateur du fichier.

%y  Type de fichier (comme dans ls -l), U = type inconnu (ne devrait pas se produire)

%Y  Type de fichier (comme %y), plus suivi des liens symboliques : « L » = boucle, « N » = inexistant, « ? » pour toute autre erreur lors de la détermination du type de la cible d’un lien symbolique.

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

%{ %[ %(

Réservé pour une utilisation future.

Un caractère « % » suivi de tout autre caractère est ignoré, mais l’autre caractère est affiché (ne vous fiez pas à cela, car d’autres caractères de format peuvent être introduits). Un caractère « % » à la fin de l’argument de format provoque un comportement indéfini, car il n’y a pas de caractère suivant. Dans certaines locales, cela peut cacher vos clés, tandis que dans d’autres, cela peut supprimer la dernière page du roman que vous lisez.

Les directives %m et %d prennent en charge les indicateurs #, 0 et +, mais les autres directives ne les prennent pas en charge, même si elles affichent des nombres. Les directives numériques qui ne prennent pas en charge ces indicateurs incluent G, U, b, D, k et n. L’indicateur de format « - » est pris en charge et modifie l’alignement d’un champ, de la justification à droite (qui est la valeur par défaut) à la justification à gauche.

Voir la section NOMS DE FICHIERS INHABITUELS pour plus d’informations sur la façon dont les caractères inhabituels dans les noms de fichiers sont gérés.

-prune Vrai ; si le fichier est un répertoire, ne pas descendre dans celui-ci. Si -depth est donné, -prune n’a aucun effet. Étant donné que -delete implique -depth, vous ne pouvez pas utiliser -prune et -delete ensemble de manière utile. Par exemple, pour ignorer le répertoire src/emacs et tous les fichiers et répertoires en dessous, et imprimer les noms des autres fichiers trouvés, faites quelque chose comme ceci :
find . -path ./src/emacs -prune -o -print

-quit Quitte immédiatement (avec une valeur de retour de zéro si aucune erreur ne s'est produite). Cela diffère de -prune, car -prune ne s'applique qu'au contenu des répertoires supprimés, tandis que -quit arrête simplement la recherche immédiatement. Aucun processus enfant ne restera en cours d'exécution. Toutes les lignes de commande qui ont été créées par -exec ... + ou -execdir ... + sont invoquées avant la sortie du programme. Après l'exécution de -quit, aucun autre fichier spécifié sur la ligne de commande ne sera traité. Par exemple, `find /tmp/foo /tmp/bar -print -quit` affichera uniquement `/tmp/foo`.
Une utilisation courante de -quit consiste à arrêter la recherche dans le système de fichiers une fois que nous avons trouvé ce que nous cherchons. Par exemple, si nous voulons trouver un seul fichier, nous pouvons faire ceci :
find / -name needle -print -quit

OPÉRATEURS

Énumérés par ordre de priorité décroissante :

( expr )

Force la priorité. Puisque les parenthèses sont spéciales pour le shell, vous devrez généralement les mettre entre guillemets. De nombreux exemples de cette page de manuel utilisent des barres obliques inversées à cette fin : \(...\)' au lieu de(...)'.

! expr Vrai si expr est faux. Ce caractère devra également généralement être protégé contre l'interprétation par le shell.

-not expr

Identique à ! expr, mais non conforme à POSIX.

expr1 expr2

Deux expressions de suite sont considérées comme étant liées par un -a implicite ; expr2 n'est pas évalué si expr1 est faux.

expr1 -a expr2

Identique à expr1 expr2.

expr1 -and expr2

Identique à expr1 expr2, mais non conforme à POSIX.

expr1 -o expr2

Ou ; expr2 n'est pas évalué si expr1 est vrai.

expr1 -or expr2

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

expr1 , expr2

Liste ; expr1 et expr2 sont toujours évalués. La valeur de expr1 est ignorée ; la valeur de la liste est la valeur de expr2. L'opérateur de liste peut être utile pour rechercher différents types d'éléments, mais en parcourant la hiérarchie du système de fichiers une seule fois. L'action -fprintf peut être utilisée pour lister les différents éléments correspondants dans plusieurs fichiers de sortie.

Veuillez noter que -a, lorsqu'il est spécifié implicitement (par exemple, en ayant deux tests apparaissant sans opérateur explicite entre eux) ou explicitement, a une priorité plus élevée que -o. Cela signifie que find . -name afile -o -name bfile -print n'affichera jamais afile.

NOMS DE FICHIERS INHABITUELS

De nombreuses actions de find entraînent l'impression de données qui sont sous le contrôle d'autres utilisateurs. Cela inclut les noms de fichiers, les tailles, les heures de modification, etc. Les noms de fichiers sont un problème potentiel car ils peuvent contenir n'importe quel caractère, à l'exception de `\0' et '/'. Les caractères inhabituels dans les noms de fichiers peuvent avoir des effets inattendus et souvent indésirables sur votre terminal (par exemple, en modifiant les paramètres de vos touches de fonction sur certains terminaux). Les caractères inhabituels sont traités différemment par les différentes actions, comme décrit ci-dessous.


`-print0`, `-fprint0`

Affiche toujours le nom de fichier exact, sans modification, même si la sortie est dirigée vers un terminal.

`-ls`, `-fls`

Les caractères inhabituels sont toujours échappés. Les espaces, les barres obliques inversées et les guillemets sont affichés en utilisant un échappement de type C (par exemple, \f, \"). Les autres caractères inhabituels sont affichés en utilisant un échappement octal. Les autres caractères imprimables (pour -ls et -fls, ce sont les caractères compris entre l’octal 041 et 0176) sont affichés tels quels.

`-printf`, `-fprintf`

Si la sortie n’est pas dirigée vers un terminal, elle est affichée telle quelle. Sinon, le résultat dépend de la directive utilisée. Les directives %D, %F, %g, %G, %H, %Y et %y renvoient des valeurs qui ne sont pas contrôlées par les propriétaires des fichiers et sont donc affichées telles quelles. Les directives %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u et %U ont des valeurs qui sont contrôlées par les propriétaires des fichiers, mais qui ne peuvent pas être utilisées pour envoyer des données arbitraires au terminal, et sont donc affichées telles quelles. Les directives %f, %h, %l, %p et %P sont entre guillemets. Ces guillemets sont effectués de la même manière que pour GNU ls. Ce n’est pas le même mécanisme de guillemets que celui utilisé pour -ls et -fls. Si vous pouvez décider du format à utiliser pour la sortie de find, il est généralement préférable d’utiliser \0 comme terminateur plutôt que le saut de ligne, car les noms de fichiers peuvent contenir des espaces et des sauts de ligne. Le paramètre de la variable d’environnement LC\_CTYPE est utilisé pour déterminer quels caractères doivent être entre guillemets.

`-print`, `-fprint`

Les guillemets sont gérés de la même manière que pour -printf et -fprintf. Si vous utilisez find dans un script ou dans une situation où les fichiers correspondants peuvent avoir des noms arbitraires, vous devez envisager d’utiliser -print0 au lieu de -print.

Les actions -ok et -okdir affichent le nom de fichier actuel tel quel. Cela peut changer dans une version ultérieure.

CONFORMITÉ AUX NORMES

Pour une conformité maximale à la norme POSIX, vous devez définir la variable d’environnement POSIXLY\_CORRECT. Les options suivantes sont spécifiées dans la norme POSIX (IEEE Std 1003.1-2008, édition 2016) :

`-H` Cette option est prise en charge.

`-L` Cette option est prise en charge.

`-name` Cette option est prise en charge, mais la conformité POSIX dépend de la conformité POSIX de la fonction `fnmatch(3)` du système. À partir de findutils-4.2.2, les métacaractères shell (`*`, `?` ou `[]` par exemple) correspondent à un point (`.`) en tête, car l’interprétation 126 de l’IEEE PASC l’exige. Il s’agit d’un changement par rapport aux versions précédentes de findutils.

`-type` Pris en charge. POSIX spécifie `b`, `c`, `d`, `l`, `p`, `f` et `s`. GNU find prend également en charge `D`, qui représente une Door, lorsque le système d’exploitation le prend en charge. De plus, GNU find permet de spécifier plusieurs types à la fois dans une liste séparée par des virgules.

`-ok` Pris en charge. L’interprétation de la réponse est conforme aux modèles `yes` et `no` sélectionnés en définissant la variable d’environnement `LC_MESSAGES`. Lorsque la variable d’environnement `POSIXLY_CORRECT` est définie, ces modèles sont extraits de la définition du système d’une réponse positive (`yes`) ou négative (`no`). Consultez la documentation du système pour `nl_langinfo(3)`, en particulier `YESEXPR` et `NOEXPR`. Lorsque `POSIXLY_CORRECT` n’est pas défini, les modèles sont extraits du catalogue de messages de find.

-newer Pris en charge. Si le fichier spécifié est un lien symbolique, il est toujours déréférencé.
Il s’agit d’une modification par rapport au comportement précédent, qui utilisait l’heure pertinente du lien symbolique ; voir la section HISTOIRE ci-dessous.

-perm Pris en charge. Si la variable d’environnement POSIXLY_CORRECT n’est pas définie, certains arguments de mode (par exemple, +a+x) qui ne sont pas valides en POSIX sont pris en charge pour assurer la compatibilité avec les versions antérieures.

Autres options principales Les options principales -atime, -ctime, -depth, -exec, -group, -links, -mtime, -nogroup, -nouser, -ok, -path, -print, -prune, -size, -user et -xdev sont toutes prises en charge.

La norme POSIX spécifie les parenthèses (, ), la négation ! et les opérateurs logiques ET/OU -a et -o.

Toutes les autres options, prédicats, expressions, etc., sont des extensions au-delà de la norme POSIX. Beaucoup de ces extensions ne sont pas spécifiques à GNU find.

La norme POSIX exige que find détecte les boucles :

L’utilitaire find doit détecter les boucles infinies ; c’est-à-dire l’entrée dans un répertoire déjà visité qui est un ancêtre du dernier fichier rencontré. Lorsqu’elle détecte une boucle infinie, find doit écrire un message de diagnostic sur la sortie d’erreur standard et soit rétablir sa position dans la hiérarchie, soit se terminer.

GNU find est conforme à ces exigences. Le nombre de liens des répertoires qui contiennent des entrées qui sont des liens physiques vers un ancêtre est souvent inférieur à ce qu’il devrait être. Cela peut signifier que GNU find optimise parfois en évitant de visiter un sous-répertoire qui est en fait un lien vers un ancêtre. Comme find n’entre pas réellement dans un tel sous-répertoire, il est autorisé à éviter d’émettre un message de diagnostic. Bien que ce comportement puisse être quelque peu déroutant, il est peu probable que quelqu’un en dépende réellement. Si l’optimisation des feuilles a été désactivée avec -noleaf, l’entrée du répertoire sera toujours examinée et le message de diagnostic sera émis lorsque cela est approprié. Les liens symboliques ne peuvent pas être utilisés pour créer des cycles de système de fichiers en tant que tels, mais si l’option -L ou l’option -follow est utilisée, un message de diagnostic est émis lorsque find rencontre une boucle de liens symboliques. Comme pour les boucles contenant des liens physiques, l’optimisation des feuilles signifie souvent que find sait qu’il n’a pas besoin d’appeler stat() ou chdir() sur le lien symbolique, de sorte que ce diagnostic n’est pas souvent nécessaire.

L’option -d est prise en charge pour assurer la compatibilité avec divers systèmes BSD, mais vous devez utiliser l’option conforme à POSIX -depth à la place.


La variable d’environnement POSIXLY_CORRECT n’affecte pas le comportement des tests -regex ou -iregex, car ces tests ne sont pas spécifiés dans la norme POSIX.

VARIABLES D’ENVIRONNEMENT

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

LC_ALL Si elle est définie sur une chaîne de caractères non vide, elle remplace les valeurs de toutes les autres variables d’internationalisation.

LC_COLLATE
La norme POSIX spécifie que cette variable affecte la correspondance de motifs utilisée pour l’option -name. GNU find utilise la fonction de bibliothèque fnmatch(3), et par conséquent, le support de LC_COLLATE dépend de la bibliothèque système. Cette variable affecte également l’interprétation de la réponse à -ok ; alors que la variable LC_MESSAGES sélectionne le motif réel utilisé pour interpréter la réponse à -ok, l’interprétation de toutes les expressions entre crochets dans le motif sera affectée par LC_COLLATE.

LC_CTYPE

Cette variable affecte le traitement des classes de caractères utilisées dans les expressions régulières, ainsi qu’avec le test -name, si la fonction de bibliothèque fnmatch(3) du système le prend en charge. Cette variable affecte également l’interprétation de toutes les classes de caractères dans les expressions régulières utilisées pour interpréter la réponse au message affiché par -ok. La variable d’environnement LC_CTYPE affectera également les caractères qui sont considérés comme non imprimables lors de l’affichage des noms de fichiers ; voir la section NOMS DE FICHIERS INHABITUELS.

LC_MESSAGES
Détermine la langue à utiliser pour les messages internationalisés. Si la variable d’environnement POSIXLY_CORRECT est définie, elle détermine également l’interprétation de la réponse au message affiché par l’action -ok.

NLSPATH

Détermine l’emplacement des catalogues de messages d’internationalisation.

PATH Affecte les répertoires qui sont recherchés pour trouver les exécutables invoqués par -exec, -execdir, -ok et -okdir.

POSIXLY_CORRECT

Détermine la taille du bloc utilisée par -ls et -fls. Si POSIXLY_CORRECT est définie, les blocs sont des unités de 512 octets. Sinon, ce sont des unités de 1024 octets.

Définir cette variable désactive également les messages d’avertissement (c’est-à-dire, implique -nowarn) par défaut, car POSIX exige qu’à l’exception de la sortie de -ok, tous les messages imprimés sur stderr soient des diagnostics et doivent entraîner un code de sortie différent de zéro.

Lorsque POSIXLY_CORRECT n’est pas définie, -perm +zzz est traité de la même manière que -perm /zzz si +zzz n’est pas un mode symbolique valide. Lorsque POSIXLY_CORRECT est définie, ces constructions sont traitées comme une erreur.

Lorsque POSIXLY_CORRECT est définie, la réponse au message affiché par l’action -ok est interprétée selon le catalogue de messages du système, plutôt que selon les propres traductions de messages de find.

TZ Affecte le fuseau horaire utilisé pour certaines des directives de format liées à l’heure de -printf et -fprintf.

EXEMPLES

Approche simple find|xargs

Rechercher les fichiers nommés core dans ou sous le répertoire /tmp et les supprimer.

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

Notez que cela ne fonctionnera pas correctement s’il y a des noms de fichiers contenant des sauts de ligne, des guillemets simples ou doubles, ou des espaces.


Approche plus sûre pour find -print0 | xargs -0

Recherchez les fichiers nommés core dans ou sous le répertoire /tmp et supprimez-les, en traitant les noms de fichiers de manière à ce que les noms de fichiers ou de répertoires contenant des guillemets simples ou doubles, des espaces ou des sauts de ligne soient correctement gérés.

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

Le test -name est effectué avant le test -type afin d’éviter d’avoir à appeler stat(2) pour chaque fichier.

Notez qu’il existe toujours une course entre le moment où find parcourt la hiérarchie et affiche les noms de fichiers correspondants, et le moment où le processus exécuté par xargs travaille avec ce fichier.

Traitement de points de départ arbitraires

Étant donné qu’un autre programme, proggy, préfiltre et crée une longue liste de fichiers séparés par des caractères NUL, traitez ces fichiers comme points de départ et recherchez tous les fichiers réguliers et vides parmi eux :

$ proggy | find -files0-from - -maxdepth 0 -type f -empty

L’utilisation de `-files0-from -` signifie lire les noms des points de départ à partir de l’entrée standard, c’est-à-dire à partir du pipeline ; et -maxdepth 0 garantit que seuls ces éléments sont examinés sans parcourir les répertoires (au cas où l’un des points de départ serait un répertoire).

Exécution d’une commande pour chaque fichier

Exécutez la commande file sur chaque fichier dans ou sous le répertoire courant.

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

Notez que les accolades sont placées entre guillemets simples pour les protéger contre l’interprétation comme ponctuation de script shell. Le point-virgule est également protégé par l’utilisation d’une barre oblique inverse, mais des guillemets simples auraient pu être utilisés dans ce cas.

Dans de nombreux cas, il peut être préférable d’utiliser la syntaxe `-exec ... +` ou mieux encore `-execdir ... +` pour des raisons de performance et de sécurité.

Parcours du système de fichiers une seule fois - pour deux actions différentes

Parcourez le système de fichiers une seule fois, en listant les fichiers et répertoires avec le bit set-user-ID dans /root/suid.txt et les fichiers volumineux dans /root/big.txt.

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

Cet exemple utilise le caractère de continuation de ligne '\' sur les deux premières lignes pour indiquer au shell de continuer à lire la commande sur la ligne suivante.

Recherche de fichiers par ancienneté

Recherchez les fichiers dans votre répertoire personnel qui ont été modifiés au cours des dernières vingt-quatre heures.

$ find $HOME -mtime 0

Cette commande fonctionne de cette manière, car le temps écoulé depuis la dernière modification de chaque fichier est divisé par 24 heures et tout reste est supprimé. Cela signifie que pour correspondre à -mtime 0, un fichier doit avoir été modifié il y a moins de 24 heures.

Recherche de fichiers par permissions

Recherchez les fichiers qui sont exécutables mais pas lisibles.

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

Recherchez les fichiers qui ont les permissions de lecture et d’écriture pour leur propriétaire et leur groupe, mais que les autres utilisateurs peuvent lire mais pas écrire.


$ find . -perm 664

Les fichiers qui répondent à ces critères, mais qui possèdent d’autres bits de permissions (par exemple, si quelqu’un peut exécuter le fichier), ne seront pas sélectionnés.

Rechercher les fichiers qui ont les permissions de lecture et d’écriture pour leur propriétaire et leur groupe, et que les autres utilisateurs peuvent lire, sans tenir compte de la présence d’autres bits de permission (par exemple, le bit d’exécution).

$ find . -perm -664

Cette commande sélectionnera un fichier qui a le mode 0777, par exemple.

Rechercher les fichiers qui sont accessibles en écriture par quelqu’un (leur propriétaire, ou leur groupe, ou n’importe qui d’autre).

$ find . -perm /222

Rechercher les fichiers qui sont accessibles en écriture soit par leur propriétaire, soit par leur groupe.

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

Ces trois commandes font la même chose, mais la première utilise la représentation octale du mode de fichier, et les deux autres utilisent la forme symbolique. Les fichiers n’ont pas besoin d’être accessibles en écriture à la fois par le propriétaire et par le groupe pour être sélectionnés ; l’un ou l’autre suffit.

Rechercher les fichiers qui sont accessibles en écriture à la fois par leur propriétaire et par leur groupe.

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

Ces deux commandes font la même chose.

Une recherche plus élaborée sur les permissions.

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

Ces deux commandes recherchent toutes deux les fichiers qui sont lisibles pour tout le monde (-perm -444 ou -perm -a+r), qui ont au moins un bit d’écriture défini (-perm /222 ou -perm /a+w) mais qui ne sont pas exécutables pour tout le monde (! -perm /111 ou ! -perm /a+x respectivement).

Élagage – Omettre les fichiers et les sous-répertoires

Copier le contenu de /source-dir vers /dest-dir, mais omettre les fichiers et les répertoires nommés .snapshot (et tout ce qui s’y trouve). Il omet également les fichiers ou répertoires dont le nom se termine par `\~', mais pas leur contenu.

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

La construction -prune -o ( ... -print0 ) est assez courante. L’idée ici est que l’expression avant -prune correspond aux éléments qui doivent être élagués. Cependant, l’action -prune elle-même renvoie vrai, de sorte que le -o suivant garantit que le côté droit est évalué uniquement pour les répertoires auxquels -prune n’a pas été appliqué (le contenu des répertoires élagués n’est même pas visité, de sorte que leur contenu est sans importance). L’expression du côté droit de -o est entre parenthèses uniquement pour plus de clarté. Cela souligne que l’action -print0 se produit uniquement pour les éléments auxquels -prune n’a pas été appliquée. Étant donné que la condition and par défaut entre les tests se lie plus fortement que -o, c’est le comportement par défaut, mais les parenthèses aident à montrer ce qui se passe.

Étant donné le répertoire de projets suivant et leurs répertoires d’administration SCM associés, effectuez une recherche efficace des racines des projets :

$ find repo/ \
\( -exec test -d '{}/.svn' \; \
-or -exec test -d '{}/.git' \; \
-or -exec test -d '{}/CVS' \; \
\) -print -prune

Exemple de résultat :

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

Dans cet exemple, l’option -prune empêche une descente inutile dans les répertoires qui ont déjà été découverts (par exemple, nous ne recherchons pas dans project3/src car nous avons déjà trouvé project3/.svn), mais elle garantit que les répertoires frères (project2 et project3) sont trouvés.

Autres exemples utiles

Recherche de plusieurs types de fichiers.

$ find /tmp -type f,d,l

Recherche de fichiers, de répertoires et de liens symboliques dans le répertoire /tmp, en passant ces types sous forme de liste séparée par des virgules (extension GNU), ce qui est équivalent à la version plus longue, mais plus portable :

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

Recherche de fichiers portant le nom spécifique « needle » et arrêt immédiat dès que le premier fichier est trouvé.

$ find / -name needle -print -quit

Démonstration de l’interprétation des directives de format %f et %h de l’action -printf pour certains cas limites. Voici un exemple avec 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]

STATUT DE SORTIE

find renvoie le statut 0 si tous les fichiers sont traités avec succès, un statut supérieur à 0 en cas d’erreurs. Il s’agit d’une description délibérément très générale, mais si la valeur de retour est différente de zéro, vous ne devez pas vous fier à la correction des résultats de find.

Lorsqu’une erreur se produit, find peut s’arrêter immédiatement, sans exécuter toutes les actions spécifiées. Par exemple, certains points de départ peuvent ne pas avoir été examinés ou certaines invocations de programme en attente pour -exec ... {} + ou -execdir ... {} + peuvent ne pas avoir été exécutées.

HISTORIQUE

Un programme find est apparu dans la version 5 d’Unix dans le cadre du projet Programmer’s Workbench et a été écrit par Dick Haight. Le livre de Doug McIlroy, A Research UNIX Reader : Annotated Excerpts from the Programmer’s Manual, 1971-1986, fournit des détails supplémentaires ; vous pouvez le lire en ligne à l’adresse [https://www.cs.dartmouth.edu/~doug/reader.pdf].

GNU find a été initialement écrit par Eric Decker, avec des améliorations apportées par David MacKenzie, Jay Plett et Tim Wood. L’idée de find -print0 et xargs -0 a été proposée par Dan Bernstein.

COMPATIBILITÉ

À partir de findutils-4.2.2, les métacaractères du shell (\`*\`, \`?\` ou \`[]\` par exemple) utilisés dans les modèles de noms de fichiers correspondent à un point (\`.`) en tête, car l’interprétation 126 de l’IEEE POSIX l’exige.

À partir de findutils-4.3.3, l’option -perm /000 correspond à tous les fichiers au lieu d’aucun.

Les horodatages de résolution nanoseconde ont été implémentés dans findutils-4.3.3.

À partir de findutils-4.3.11, l’action -delete définit le statut de sortie de find sur une valeur différente de zéro lorsqu’elle échoue. Cependant, find ne s’arrêtera pas immédiatement. Auparavant, le statut de sortie de find n’était pas affecté par l’échec de -delete. Fonctionnalité                     Ajoutée dans     Se produit également 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 été supprimée dans findutils-4.5.12, au profit de -perm /MODE. La syntaxe +MODE était obsolète depuis findutils-4.2.21, version sortie en 2005.

NON-BOGUES

Surprises liées à la priorité des opérateurs

La commande find . -name afile -o -name bfile -print n’imprimera jamais afile car elle est en réalité équivalente à find . -name afile -o (-name bfile -a -print ). N’oubliez pas que la priorité de -a est supérieure à celle de -o et, lorsqu’aucun opérateur n’est spécifié entre les tests, -a est supposé.

« le message d’erreur « les chemins doivent précéder l’expression »
$ find . -name \*.c -print
find : les chemins doivent précéder l’expression
find : motif possible non entre guillemets après le prédicat `-name'?

Cela se produit lorsque le shell peut développer le motif *.c en plus d’un nom de fichier existant dans le répertoire courant, et en transmettant les noms de fichiers résultants à find dans la ligne de commande comme ceci : find . -name frcode.c locate.c word_io.c -print Cette commande ne fonctionnera bien sûr pas, car le prédicat -name n’accepte qu’un seul motif en argument. Au lieu de faire cela, vous devez mettre le motif entre guillemets ou échapper le caractère générique, ce qui permet à find d’utiliser le motif avec le caractère générique pendant la recherche du nom de fichier correspondant au lieu que le shell parent ne développe les noms de fichiers : $ find . -name '*.c' -print $ find . -name *.c -print

BOGUES

Il existe des problèmes de sécurité inhérents au comportement que la norme POSIX spécifie pour find, qui ne peuvent donc pas être corrigés. Par exemple, l’action -exec est intrinsèquement non sécurisée, et -execdir doit être utilisée à la place.

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

SIGNALEMENT DES BOGUES

Aide en ligne de GNU findutils : [https://www.gnu.org/software/findutils/#get-help] Signalez tout bogue de traduction à [https://translationproject.org/team/]

Signalez tout autre problème via le formulaire du système de suivi des bogues de GNU Savannah : [https://savannah.gnu.org/bugs/?group=findutils] Les sujets généraux concernant le paquet GNU findutils sont abordés dans la liste de diffusion bug-findutils : [https://lists.gnu.org/mailman/listinfo/bug-findutils]

Copyright © 1990–2024 Free Software Foundation, Inc. Licence GPLv3+ : GNU GPL version 3 ou ultérieure [https://gnu.org/licenses/gpl.html]. Il s’agit d’un logiciel libre : vous êtes libre de le modifier et de le redistribuer. Il n’y a AUCUNE GARANTIE, dans la mesure permise 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 complète [https://www.gnu.org/software/findutils/find] ou disponible localement via : info find