FIND
Table des matières
Retour à l'index
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é 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 développés 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
« / ». Autrement, il est généralement sûr, bien que non portable, d'utiliser
l'option GNU -files0-from pour passer des points de départ arbitraires à
find.
- -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
-
Ne pas suivre les liens symboliques, sauf pour le traitement des paramètres
de la ligne de commande. Quand find analyse ou affiche les informations
concernant un fichier, celles qui sont utilisées viennent des propriétés du
lien symbolique lui-même. La seule exception à ce comportement est lorsqu'un
fichier indiqué sur la ligne de commande est lui-même un lien symbolique, et
que ce lien peut être résolu. Dans ce cas, les informations traitées sont
celles du fichier pointé par le lien (autrement dit, le lien est suivi). Les
informations concernant le lien lui-même sont utilisées en dernier recours,
si le fichier pointé par le lien symbolique ne peut pas être analysé. Si
l'option -H est active et que l'un des liens indiqués sur la ligne de
commande est un lien symbolique pointant vers un répertoire, le contenu de
ce répertoire sera analysé (sachant bien sûr que l'option -maxdepth 0
l'en empêcherait).
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 aura été analysé et
certaines de ses caractéristiques auront é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
-
Afficher des informations de diagnostic, ce qui peut être pratique pour
analyser pourquoi find ne fait pas ce que vous lui demandez. La liste des
options de débogage devra utiliser des virgules comme séparateurs. La
compatibilité des options de débogage n'est pas garantie au fil des versions
de findutils. La sortie de find -D help permet d'obtenir la liste
complète des options reconnues. Les options de débogage autorisées
comprennent
-
- 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
-
Tous les tests -type ou -xtype sont exécutés après ceux basés
uniquement sur le nom des fichiers, mais avant tous les tests qui exigent
des informations stockées dans l'inœud. Sur de nombreuses versions modernes
d'Unix, les types de fichiers sont récupérés par readdir() et sont donc
plus rapides à évaluer que ceux qui nécessitent de travailler d'abord sur le
fichier. Si vous utilisez le prédicat -fstype TOTO et si vous
spécifiez un type de système de fichiers TOTO non connu (à savoir présent
dans /etc/mtab), au moment du démarrage de find, ce prédicat est
équivalent à -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.
-
L'optimiseur basé sur le coût a une idée précise des chances de succès de
n'importe quel test. Dans certains cas, cette probabilité prend en compte la
nature spécifique du test (par exemple, l'estimation de succès d'un
-type f est supérieure à celle d'un -type c). L'optimiseur basé sur le
coût est actuellement en cours d'évaluation. S'il n'améliore pas les
performances de find, il sera de nouveau retiré. Réciproquement, les
optimisations qui s'avèrent fiables, robustes et efficaces pourront dans
l'avenir être activées à des niveaux d'optimisations moindres. Toutefois, le
comportement par défaut (c’est-à-dire le niveau d'optimisation 1) ne sera
pas modifié dans les différentes versions de la série 4.3.x. La suite de
tests unitaires de findutils est exécutée sur chacun des niveaux
d'optimisation de find afin de s'assurer que le résultat est constant.
Le réarrangement des opérations exécutées par l'optimiseur basé sur le coût
peut résulter en un changement de comportement visible par
l'utilisateur. Par exemple, les prédicats -readable et -empty sont
sensibles au réarrangement. Si exécutés dans l'ordre -empty -readable, un
message d'erreur sera affiché pour les répertoires illisibles. Si exécutés
dans l'ordre -readable -empty, aucun message d'erreur ne sera
produit. C'est pourquoi une telle opération de réarrangement n'est pas
exécutée au niveau d'optimisation par défaut.
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 requête 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 la réalisation de tests et d'actions
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 rationnelle 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
-
Changer la syntaxe de l'expression rationnelle des tests -regex et
-iregex qui seront indiqués plus loin sur la ligne de commande. Pour voir
les types d'expression rationnelle connus, utilisez
-regextype help. La documentation de Texinfo (voir VOIR AUSSI)
explique la signification et les différences entre les différents types
d'expression rationnelle. Si vous n'utilisez pas cette option, find se
comporte comme si le type d'expression rationnelle emacs avait été
spécifié.
- -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.
- -files0-from fichier
-
Lire les points de départ à partir de fichier au lieu de l'obtenir sur la
ligne de commande. Contrairement aux limites connues de passer des points de
départ au moyen d'arguments sur la ligne de commande, à savoir la limitation
du nombre de noms de fichier, et l'ambiguïté inhérente de noms de fichiers
en conflit avec des noms d'option, l'utilisation de cette option permet des
passer sans risque un nombre arbitraire de points de départ à find.
Utiliser cette option et passer les points de départ en ligne de commande
s'excluent mutuellement et cela n'est donc pas permis en même temps.
L'argument fichier est obligatoire. Il est possible d'utiliser
-files0-from - pour lire la liste des points de départ à partir du flux
de l'entrée standard, et par exemple d'un tube. Dans ce cas, les actions
-ok et -okdir ne sont pas permises parce qu'elles interféreraient de
façon évidente avec la lecture à partir de l'entrée standard afin
d'obtenir une confirmation de l'utilisateur.
Les points de départ dans fichier doivent être séparés par des caractères
ASCII NULL. Deux caractères NULL successifs, par exemple un point de départ
avec un nom de fichier de longueur nulle ne sont pas permis et mèneront à
une erreur de diagnostic suivie d'un code d'erreur différent de zéro.
Dans le cas où le fichier donné en argument est vide, find ne traite
aucun point de départ et donc quittera immédiatement après l'analyse des
arguments du programme. C'est différent de l'invocation standard où find
considère le répertoire actuel comme point de départ si aucun argument de
chemin n'est passé.
Sinon, le traitement des points de départ est comme d'habitude, par exemple
find parcourra de façon récursive les sous-répertoires sauf indication
contraire. Pour ne traiter que les points de départ, il est possible de
passer l'argument -maxdepth 0 en plus.
Remarques supplémentaires : si un fichier est listé 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 déplacé pendant le fonctionnement de find, le résultat
n'est pas précisé non plus. Enfin, la position de la recherche à l'intérieur
du fichier nommé au moment où find quitte, que se soit avec la
commande quit ou de n'importe quelle manière, n'est pas non plus
précisée. Par « non précisé », on entend ici que cela peut fonctionner ou
non, ou faire quelque chose de particulier et que le comportement peut
changer d'une plateforme à l'autre ou selon la version de findutils.
- -help, --help
-
Afficher un message d'aide concernant l'utilisation de find sur la sortie
standard et quitter.
- -ignore_readdir_race
-
Normalement, find affiche un message d'erreur quand il é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
-
Descendre au plus à n niveaux de profondeur des répertoires (n étant
un entier positif ou nul) sous le point de départ. -maxdepth 0 signifie
de n'appliquer les tests et les actions qu'aux points de départ eux-mêmes.
- -mindepth n
-
Ne pas appliquer les tests ou les actions à des niveaux de profondeur
inférieurs à n (un entier non négatif). n est un entier positif ou
nul. -mindepth 1 signifie que les tests et les actions s'appliquent à
tous les fichiers sauf aux points de départ.
- -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 -newerXY et -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
-
Dernier accès au fichier il y a plus de, moins de ou précisément n*24
heures. Lorsque find calcule le nombre de périodes de 24 heures depuis
lequel il y a eu un accès au fichier, la partie fractionnelle est
ignorée. Ainsi, pour correspondre à -atime +1, il faut qu'un accès au
fichier ait eu lieu il y a au moins deux jours.
- -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 capitales et les
minuscules.
- -iregex motif
-
Semblable à -regex, mais sans différencier les capitales 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 les répertoires parents) correspond
au motif de l'interpréteur de commande. Les répertoires parents des noms
de fichier étant supprimés, le motif ne doit pas inclure de barre oblique
parce que « -name a/b » ne trouvera rien (vous devrez probablement utiliser
plutôt -path). Une exception à l'utilisation de la barre oblique dans
motif (« -name / ») est la recherche du répertoire racine, car cela est
une chaine valable pour correspondre au répertoire racine « / » (car le nom
de base de « / » est « / »). Un avertissement apparaît si vous essayez de
passer un motif contenant une barre oblique, mais ne consistant pas en une
seule 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, 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 avec des guillemets afin d'éviter le développement
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'inœud 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"
affichera une entrée pour un répertoire nommé ./src/misc (s'il en existe
un). Pour ignorer toute une arborescence, utilisez -prune au lieu de
vérifier chaque fichier d'une arborescence. Remarquez que le test de
correspondance de motif s'applique à tout le nom du fichier en commençant
par un des points de départ désigné sur la ligne de commande. Ici, utiliser
un chemin absolu n'aurait de sens que si le point de départ en question est
aussi un chemin absolu. Cela veut dire que cette commande ne correspondra
jamais :
find bidule -path /truc/bidule/monFichier -print
find compare l'argument -path à 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. Par exemple, -perm g=w 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
-
Fichier ayant certains des bits d'autorisations indiqués dans le mode. La
notation symbolique est acceptée dans ce cas. Vous devez indiquer « u »,
« g » ou « o » si vous utilisez un mode symbolique. Consultez la section
EXEMPLES pour des exemples plus significatifs. Si aucun bit
d'autorisation n'est indiqué dans mode, cela correspond à tous les
fichiers (l'objectif est d'être cohérent avec le comportement de
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 pas se servir des
substitutions d'identités gérées du coté serveur.
- -regex motif
-
Nom de fichier correspondant à l'expression rationnelle motif. Il s'agit
d'une correspondance sur le chemin complet, pas d'une recherche. Par
exemple, pour mettre en correspondance un fichier nommé « ./fubar3 », vous
pouvez utiliser les expressions rationnelles « .*bar. » ou « .*b.*3 »,
mais pas « f.*r3 ». Les expressions rationnelles comprises par find
sont, par défaut, celles d'Emacs, mais cela peut être changé avec l'option
-regextype.
- -samefile nom
-
Fichier qui se réfère au même inœud 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 kibioctets (Kio, unités de 1024 octets)
- « M »
-
Pour des mébioctets (Mio, unités de 1024 * 1024 = 1048576 octets)
- « G »
-
pour des gibioctets (Gio, unités de
1024 * 1024 * 1024 = 1073741824 octets)
-
La taille est simplement le membre st_size de struct stat remplie par
l'appel système lstat (ou stat), arrondie à l'unité supérieure comme
décrit ci-dessus. En d'autres termes, il est cohérent avec le résultat de
ls -l. Souvenez-vous que les spécificateurs de format « %k » et « %b » de
-printf gèrent différemment les fichiers creux. Le suffixe « b » décompte
toujours des blocs de 512 octets, jamais de 1024 octets, contrairement au
comportement de -ls.
-
Les préfixes + et - signifient, comme d'habitude, plus grand que et
plus petit que ; ainsi une taille exacte de n unités ne correspond
pas. Retenez que la taille est arrondie à l'unité supérieure. Donc
-size -1M n'équivaut pas à -size -1048576c. Le premier ne
correspond qu'à des fichiers vides, le second à des fichiers pesant entre 0
et 1 048 575 octets.
- -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
-
répertoire
- p
-
tube nommé (FIFO)
- f
-
fichier normal
- 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 la date de sa 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. Si un lien symbolique est cassé (parce que
le sujet qu'il pointe n'existe pas ou que le lien pointe sur lui-même),
alors -xtype se comportera comme -type.
- -context motif
-
(SELinux seulement) le contexte de sécurité du fichier correspond au
motif global.
ACTIONS
- -delete
-
Effacer les fichiers ou les répertoires et renvoyer vrai si l'effacement a
réussi. Si l'effacement échoue, un message d'erreur est envoyé et le code de
retour de find sera différent de zéro (quand finalement il s'interrompt).
Attention : N'oubliez pas que find évalue la ligne de commande comme
une expression. Aussi placer -delete en premier fera que find essaiera
de détruire tout ce qu'il trouvera sous le point de départ spécifié.
L'utilisation de l'action -delete en ligne de commande active
automatiquement l'option -depth. Comme à son tour -depth rend
-prune inefficace, l'action -delete ne peut pas être combinée de façon
utile avec -prune.
Souvent, l'utilisateur voudrait tester une recherche find en ligne de
commande avec -print avant d'ajouter -delete à l'exécution réelle de
la suppression. Pour éviter des résultats surprenants, il est habituellement
préférable de ne pas oublier d'utiliser -depth explicitement pendant
l'exécution préalable du test.
L'action -delete échouera aussi à supprimer un répertoire à moins qu'il
ne soit vide.
Avec l'option -ignore_readdir_race, find ignorera les erreurs de
l'action -delete si le fichier a disparu depuis que le répertoire parent
a été lu : il n'affichera pas de diagnostic d'erreur, ne changera pas le
code d'erreur à une valeur différente de zéro, 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 {} +
-
Cette variante de l'option -exec exécute la commande spécifiée sur les
fichiers sélectionnés, mais en ajoutant le nom de chaque fichier trouvé à la
fin de la ligne de commande. Le nombre total d'invocations de la commande
sera donc très inférieur au nombre de fichiers trouvés. La ligne de commande
est construite à la manière de xargs. Une seule instance de « {} » est
permise à l'intérieur de la commande et elle doit apparaître à la fin et
immédiatement avant le « + » ; elle doit être échappée (avec un « \ ») ou
entre guillemets pour la protéger d'une interprétation par les
interpréteurs. La commande sera exécutée dans le répertoire de départ. Si
une invocation avec la forme « + » renvoie une valeur différente de zéro
comme code de retour, alors find renvoie un code de retour différent de
zéro. Si find rencontre une erreur, cela peut parfois provoquer une fin
immédiate, aussi certaines commandes en attente pourraient ne pas être
exécutées. C'est pourquoi -exec ma_commande ... {} \+ -quit peut
n'aboutir à aucune exécution de ma_commande. Cette variante de -exec
renvoie toujours vrai.
- -execdir commande ;
-
- -execdir commande {} +
-
Semblable à -exec, sauf que la commande indiquée sera exécutée à partir
du sous-répertoire contenant le fichier correspondant qui n'est normalement
pas celui à partir duquel vous avez lancé find. Comme avec -exec,
{} devrait être entouré de guillemets si find est appelé depuis un
interpréteur. C'est une méthode bien plus fiable d'invocation de commande,
puisqu'elle évite des conflits de résolution de chemins des fichiers
trouvés. Comme pour l'option -exec, la forme de -execdir avec « + »
construira une ligne de commande de telle sorte qu'elle pourra traiter
plusieurs fichiers trouvés en une passe, mais chaque invocation de
commande ne portera que sur une liste de fichiers issus d'un seul et même
répertoire. Si vous utilisez cette option, veillez bien à ce que votre
variable d'environnement PATH ne contienne pas une référence au
répertoire courant « . », sinon un pirate pourrait lancer toutes les
commandes qu'il souhaite en mettant un fichier au nom adéquat dans les
répertoires où vous allez lancer un -execdir. De la même manière, évitez
les références vides ou les noms de répertoires exprimés en relatif dans
PATH. Si une invocation avec la forme « + » renvoie un état de sortie
autre que zéro, find renvoie un état de sortie qui n'est pas zéro. Si
find rencontre une erreur, il peut quitter immédiatement, donc des
commandes en attente ne seront pas lancées. Le résultat de l'action varie
selon que vous utilisez la variante + ou ; ;
-execdir commande {} + renvoie toujours vrai alors que
-execdir commande {} ; ne renvoie vrai que si commande
renvoie 0.
- -fls fichier
-
Vrai ; semblable à -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
-
Vrai ; écrire le nom complet dans le fichier. Si fichier n'existe pas
au démarrage de find, il est créé. S'il existe, il est écrasé. Les noms
de fichier /dev/stdout et /dev/stderr sont traités de manière
particulière, ils correspondent respectivement à la sortie standard et à la
sortie d'erreurs. 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.
- -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 ;
-
Comme -exec, mais interroger d'abord l'utilisateur. Si l'utilisateur
acquiesce, la commande est lancée. Sinon, le test devient faux. Si la
commande est lancée, son entrée standard est redirigée depuis
/dev/null. Cette action ne peut être indiquée en même temps que l'option
-files0-from.
-
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 ;
-
Comme -execdir, mais interroger d'abord l'utilisateur comme dans le cas
de -ok. Si l'utilisateur n'acquiesce pas, le test renvoie faux. Si la
commande est lancée, son entrée standard est redirigée depuis
/dev/null. Cette action ne peut être indiquée en même temps que l'option
-files0-from.
- -print
-
Vrai ; afficher le nom complet du fichier sur la sortie standard, suivi
d'un saut de ligne. Si vous redirigez la sortie standard de find vers un
autre programme et qu'il y a la moindre chance qu'un des noms des fichiers
que vous recherchez contienne un saut de ligne, alors vous devriez 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
-
Vrai ; afficher le format sur la sortie standard, en interprétant les
séquences d'échappement « \ » et les directives « % ». La largeur et la
précision des champs peuvent être spécifiées comme dans la fonction « printf » du langage C. Notez bien que la plupart des champs sont affichés
selon %s plutôt que %d, ce qui veut dire que les drapeaux ne fonctionneront
peut-être pas comme vous vous y attendez. Cela veut aussi dire que le
drapeau « - » fonctionnera (il force l'alignement des champs à
gauche). Contrairement à -print, -printf n'ajoute pas de saut de ligne
à la fin de la chaîne. Les séquences d'échappement et les directives sont
les suivantes :
-
- \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
-
Nouvelle 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
-
Date du dernier accès au fichier, dans le format renvoyé par la fonction C
ctime(3).
- %Ak
-
Date du dernier accès au fichier, dans le format spécifié par k, qui doit
être soit un « @ », soit une directive pour la fonction C
strftime(3). Les valeurs possibles de k sont indiquées
ci-dessous. Veuillez vous reporter à la documentation de strftime(3) pour
la liste complète. Certains caractères de spécification de conversion
pourraient ne pas être disponibles sur tous les systèmes, à cause des
différences entre les fonctions strftime(3) existantes.
-
- @
-
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 (aaaa/mm/jj)
- 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).
- %Bk
-
La date de « naissance » du fichier, c'est-à-dire sa date de création, au
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-jacents ne gèrent pas les dates de création.
- %c
-
Date de dernière modification d’état du fichier, dans le format renvoyé par
la fonction C ctime(3).
- %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
-
Afficher le nom de base ; le nom du fichier moins les répertoires supérieurs
(uniquement le dernier élément). Pour « / », le résultat est « / ». Voir la
section EXEMPLES pour un exemple.
- %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
-
Nom de répertoire ; répertoires en tête du nom de fichier (tout sauf la
dernière partie). Si le nom du fichier ne contient aucune barre oblique
(NDT : slash) (donc si c'est un fichier du répertoire courant), alors
l'option %h se développera en « . ». Pour les fichiers étant eux-mêmes des
répertoires et contenant 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 à 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
ordinaire 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
-
Date de dernière modification du fichier, dans le format renvoyé par la
fonction C ctime(3).
- %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.
Les options %m et %d gèrent les drapeaux #, 0 et +, à l'inverse des
autres directives, même si elles affichent des nombres. Les autres
directives numériques qui ne gèrent pas ces drapeaux sont G, U, b,
D, k et n. Le drapeau de format « - » est géré, et transforme
l'alignement des champs (qui sont par défaut alignés à droite) en alignement
à gauche.
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
-
Vrai ; si le fichier est un répertoire, ne pas y descendre. Si -depth est
donné, alors -prune est sans effet. Parce que -delete implique
-depth, vous ne pouvez pas utiliser utilement à la fois -prune et
-delete. Par exemple, pour sauter le répertoire src/emacs et tous les
fichiers et répertoires en dessous, et afficher les noms des autres fichiers
trouvés, faites quelque chose comme ceci :
find . -path ./src/emacs -prune -o -print
- -quit
-
Quitter immédiatement (avec le code de retour zéro s'il n'y a eu aucune
erreur). C'est différent de -prune, car -prune ne s'applique qu'au
contenu des répertoires coupés, tandis que -quit arrête simplement
find immédiatement. Aucune exécution de processus enfant ne sera
poursuivie. Toute ligne de commande construite par -exec ... + ou
-execdir ... + sera appelée avant que le programme ne quitte. Après
-quit, plus aucun fichier indiqué sur la ligne de commande ne sera
traité. Par exemple, « find /tmp/toto /tmp/machin -print -quit » n'affichera que « /tmp/toto ».
Une utilisation classique de -quit consiste à arrêter l'examen du système
de fichiers dès qu'on a trouvé ce qu'on cherche. Par exemple, si on veut
chercher un seul fichier, on peut faire cela :
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
-
Cette option est gérée, mais la conformité à POSIX dépend de la conformité
POSIX de la fonction fnmatch(3) de la bibliothèque du système. À compter
de findutils-4.2.2, les métacaractères du shell (« * », « ? » ou « [] » par exemple) trouveront les fichiers commençant par « . », car
l'interprétation 126 d'IEEE PASC l'impose. Cela diffère des versions
précédentes de 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.
Le standard POSIX définit les parenthèses « ( », « ) », la négation « ! » et les opérateurs logiques AND/OR, -a et -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é qui est un parent 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 GNU est conforme à cette exigence. Le décompte des liens
de répertoires qui contiennent des liens en dur vers des répertoires parents
sera souvent inférieur à ce qu’il serait autrement. Cela peut signifier que
GNU find optimise parfois 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 de diagnostic 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 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.
-
Lorsque POSIXLY_CORRECT n'est pas défini, -perm +zzz est géré de la
même façon que -perm /zzz, lorsque +zzz n'est pas un mode
symbolique valable. Lorsque POSIXLY_CORRECT est défini, une telle demande
est considérée comme une erreur.
-
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
Approche simple de « find|xargs »
- -
-
Rechercher les fichiers nommés core dans le répertoire /tmp ou dans
ses sous-répertoires, puis les effacer.
$ find /tmp -name core -type f -print | xargs /bin/rm -f
Remarquez que cela ne fonctionnera pas bien si des noms de fichiers
comportent des retours à la ligne, des guillemets simples ou doubles ou des
espaces.
Approche plus sûre de « find -print0 | xargs -0 »
- -
-
Chercher les fichiers qui s'appellent core dans le répertoire /tmp et
ses sous-répertoires, puis les effacer, en veillant à ce que les noms de
fichiers ou de répertoires qui contiennent des guillemets simples ou
doubles, des espaces ou des retours à la ligne soient correctement traités.
$ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Le test -name est effectué avant celui -type afin d'éviter un appel
stat(2) sur tous les fichiers.
Remarquez qu'il y a toujours un conflit entre le moment où find explore
la hiérarchie et affiche les noms de fichiers trouvés et celui où le
processus exécuté par xargs agit sur le fichier.
Traitement de points de départ arbitraires
- -
-
Étant donné qu'un autre programme programme exécute un pré-filtre et crée
une énorme liste de fichiers séparés par des caractères NULL, les traiter
comme points de départ et trouver tous les fichiers normaux parmi eux :
$ proggy | find -files0-from - -maxdepth 0 -type f -empty
L'utilisation de -files0-from - signifie lire les noms des points de
départ à partir de l'entrée standard, c'est-à-dire par exemple d'un tube,
et -maxdepth 0 assure que seules ces entrées explicitement désignées
seront examinées sans parcours récursif dans les répertoires (au cas où une
des points de départ est un répertoire).
Exécuter une commande pour chaque fichier
- -
-
Exécuter fichier sur chaque fichier du répertoire actuel ou de ses
sous-répertoires.
$ find . -type f -exec fichier '{}' \;
Remarquez que les accolades sont entourées par des guillemets afin
d'empêcher leur interprétation en tant que ponctuation du script
d'interpréteur. De la même façon, le point-virgule est protégé grâce à une
barre oblique inverse, bien que l'apostrophe aurait aussi pu être utilisée
dans ce cas.
Dans de nombreux cas, on pourrait préférer la syntaxe `-exec ... +`, voire même `-execdir ... +`, pour des raisons de performance
et de sécurité.
Explorer une fois le système de fichiers - pour deux actions différentes
- -
-
Parcourir le système de fichiers en une seule passe, stockant les fichiers
et répertoires en setuid dans /root/suid.txt et les gros fichiers dans
/root/grand.txt.
$ find / \
\( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
\( -size +100M -fprintf /root/grand.txt '%-10s %p\n' \)
Cet exemple utilise le caractère de suite de ligne '\' sur les deux
premières lignes pour demander à l'interpréteur de continuer à lire la
commande sur la ligne suivante.
Rechercher des fichiers par leur âge
- -
-
Rechercher les fichiers dans votre dossier personnel qui ont été modifiés
pendant les dernières vingt-quatre heures.
$ find $HOME -mtime 0
Cette commande s'exprime de cette façon parce que la date de dernière
modification de chaque fichier est découpée en tranche de 24 heures et le
reliquat est éliminé. Cela veut dire que pour correspondre à -mtime 0,
un fichier doit avoir une antériorité de modification inférieure à
24 heures.
Rechercher les fichiers par leurs permissions
- -
-
Rechercher les fichiers qui offrent le droit d'exécution, mais qui ne sont
pas lisibles.
$ find /sbin /usr/sbin -executable \! -readable -print
- -
-
Rechercher les fichiers qui ont la permission de lire et d'écrire pour leur
propriétaire et groupe et que les autres utilisateurs ne peuvent que lire.
$ find . -perm 664
Les fichiers qui satisfont ces critères, mais qui ont d'autres bits de
permissions activés (par exemple si le fichier est exécutable par quelqu'un)
ne seront pas sélectionnés.
- -
-
Rechercher les fichiers qui ont la permission de lire et d'écrire pour leur
propriétaire et leur groupe et que les autres utilisateurs peuvent lire,
sans toutefois s'intéresser à la présence d'autres bits de permissions (le
bit d'exécution par exemple).
$ find . -perm -664
Cela trouvera un fichier dont le mode est, par exemple, 0777.
- -
-
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
- -
-
Rechercher les fichiers qui offrent le droit d'écriture à leur propriétaire
ou à leur groupe.
$ find . -perm /220
$ find . -perm /u+w,g+w
$ find . -perm /u=w,g=w
Ces commandes font toutes les trois la même chose, mais la première utilise
le mode octal pour représenter les modes du fichier, alors que les deux
autres se servent de la forme symbolique. Ces fichiers n'ont pas à offrir à
la fois le droit d'écriture au propriétaire et au groupe, l'un ou l'autre
suffira.
- -
-
Rechercher les fichiers qui offrent le droit d'écriture à leur propriétaire
et à leur groupe.
$ find . -perm -220
$ find . -perm -g+w,u+w
Ces deux commandes font la même chose.
- -
-
Une recherche plus élaborée à partir des permissions.
$ find . -perm -444 -perm /222 \! -perm /111
$ find . -perm -a+r -perm /a+w \! -perm /a+x
Ces commandes recherchent toutes les deux les fichiers qui sont lisibles par
tous (perm -444 ou -perm -a+r), ont au moins un des bits d'écriture
actif (-perm /222 ou -perm /a+w), mais qui ne sont exécutables par
personne (respectivement ! -perm /111 et ! -perm /a+x).
Découper – omettre des fichiers et des sous-répertoires
- -
-
Copier le contenu de répertoire-source dans répertoire-cible, en
omettant les fichiers ou les répertoires nommés .snapshot (et tout ce
qu'ils contiennent). Cela omet aussi les fichiers ou les répertoires dont le
nom se termine par « ~ », mais pas les autres contenus.
$ cd /répertoire-source
$ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
| cpio -pmd0 /dest-dir
La structure -prune -o \( ... -print0 \) est très
connue. L'idée ici, c'est que l'expression avant -prune indique les
fichiers à couper. Toutefois, l'action -prune renvoie vrai, donc le -o
qui suit n'applique l'expression à sa droite que sur les répertoires qui
n'ont pas été coupés (le contenu des répertoires coupés n'est même pas
consulté, leur contenu n'est donc pas pertinent). L'expression à droite du
-o est entre parenthèses pour des raisons de clarté uniquement. L'accent
est mis ici sur le fait que l'action -print0 ne s'exécute que pour les
items qui n'ont pas été coupés par -prune. Le « et » implicite entre
les conditions de tests est plus prioritaire que le -o, mais les
parenthèses aident à comprendre ce qu'il se passe ici.
- -
-
É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
Exemple de sortie :
repo/project1/CVS
repo/gnu/project2/.svn
repo/gnu/project3/.svn
repo/gnu/project3/src/.svn
repo/project4/.git
Dans cet exemple, -prune évite l'inutile inspection des répertoires qui
ont déjà été découverts (ne cherche pas par exemple dans project3/src
puisqu'il a déjà été trouvé dans project3/.svn) tout en s'assurant que
les répertoires frères (project2 et project3) le sont.
Autres exemples utiles
- -
-
Rechercher plusieurs types de fichiers.
$ find /tmp -type f,d,l
Rechercher des fichiers, des répertoires et des 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 commande plus longue
mais plus portable :
$ find /tmp \( -type f -o -type d -o -type l \)
- -
-
Rechercher les fichiers du nom particulier needle et arrêter
immédiatement dès qu'on trouve le premier.
$ find / -name needle -print -quit
- -
-
Démonstration de l'interprétation des directives de format %f et %h de
l'action -printf dans certains cas de niche. Voici un exemple comprenant
une sortie.
$ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n'
[.][.]
[.][..]
[][/]
[][tmp]
[/tmp][TRACE]
[.][compile]
[compile/64/tests][find]
CODE DE RETOUR
find s'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.
Quand une erreur se produit, find peut s'arrêter immédiatement sans
terminer les actions spécifiées. Par exemple, il se peut que certains points
de départ ne soient pas examinés ou que des appels en attente de programmes
par -exec ... {} + ou -execdir ... {} + ne se fassent
pas.
HISTORIQUE
Le programme find est apparu dans la version 5 d'Unix faisant partie du
« Programmer's Workbench project » et a été écrit par Dick Haight. Le manuel
de Doug McIlroy A Research UNIX Reader : Annotated Excerpts from the Programmer’s Manual, 1971-1986 fournit quelques détails supplémentaires ;
il est possible de le lire en ligne à
<https://www.cs.dartmouth.edu/~doug/reader.pdf>.
GNU find a été écrit à l'origine par Eric Decker et amélioré par David
MacKenzie, Jay Plett et Tim Wood. L'idée pour find -print0 et xargs -0
vient de Dan Bernstein.
COMPATIBILITÉ
À partir de findutils-4.2.2, les métacaractères de l'interpréteur (« * »,
« ? » ou « [] » par exemple) utilisés dans les motifs des noms de
fichier trouveront les fichiers commençant par « . » parce que
l'interprétation 126 d'IEEE POSIX l'impose.
À partir de findutils-4.3.3, -perm /000 explore maintenant tous les
fichiers plutôt qu'aucun.
La gestion des nanosecondes dans les horodatages a été implémentée dans
findutils-4.3.3.
L'action -delete force find à envoyer un code de retour 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, le code de retour de
find n'était pas modifié par l'échec de -delete.
| Fonctionnalités | Ajoutées | Présentes aussi dans
|
| -files0-from | 4.9.0 |
|
| -newerXY | 4.3.3 | BSD
|
| -D | 4.3.1 |
|
| -O | 4.3.1 |
|
| -readable | 4.3.0 |
|
| -writable | 4.3.0 |
|
| -executable | 4.3.0 |
|
| -regextype | 4.2.24 |
|
| -exec ... + | 4.2.12 | POSIX
|
| -execdir | 4.2.12 | BSD
|
| -okdir | 4.2.12 |
|
| -samefile | 4.2.11 |
|
| -H | 4.2.5 | POSIX
|
| -L | 4.2.5 | POSIX
|
| -P | 4.2.5 | BSD
|
| -delete | 4.2.3 |
|
| -quit | 4.2.3 |
|
| -d | 4.2.3 | BSD
|
| -wholename | 4.2.0 |
|
| -iwholename | 4.2.0 |
|
| -ignore_readdir_race | 4.2.0 |
|
| -fls | 4.0 |
|
| -ilname | 3.8 |
|
| -iname | 3.8 |
|
| -ipath | 3.8 |
|
| -iregex | 3.8 |
|
La syntaxe -perm +MODE a é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 développer le motif *.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
développés par l'interpréteur parent :
$ find . -name '*.c' -print
$ find . -name \*.c -print
BOGUES
Des problèmes de sécurité se posent, inhérents au comportement de find
tel que défini par le standard POSIX, et qui ne peuvent donc être
résolus. Par exemple, l'action -exec est dangereuse par nature et
l'utilisation de -execdir est préférable.
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-2024 Free Software Foundation, Inc. Licence 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)
Documentation complète :
<https://www.gnu.org/software/findutils/find>
aussi disponible localement à l’aide de : 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>,
Jean-Philippe MENGUAL <jpmengual@debian.org>
et
Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
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 à
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- OPTIONS
-
- EXPRESSIONS
-
- OPTIONS DE POSITION
-
- OPTIONS GLOBALES
-
- TESTS
-
- ACTIONS
-
- OPÉRATEURS
-
- NOMS DE FICHIERS PEU COURANTS
-
- CONFORMITÉ AUX STANDARDS
-
- VARIABLES D'ENVIRONNEMENT
-
- EXEMPLES
-
- Approche simple de « find|xargs »
-
- Approche plus sûre de « find -print0 | xargs -0 »
-
- Traitement de points de départ arbitraires
-
- Exécuter une commande pour chaque fichier
-
- Explorer une fois le système de fichiers - pour deux actions différentes
-
- Rechercher des fichiers par leur âge
-
- Rechercher les fichiers par leurs permissions
-
- Découper – omettre des fichiers et des sous-répertoires
-
- Autres exemples utiles
-
- CODE DE RETOUR
-
- HISTORIQUE
-
- COMPATIBILITÉ
-
- FAUX BOGUES
-
- Surprises avec la précédence d'un opérateur
-
- Message d’erreur "paths must precede expression"
-
- BOGUES
-
- SIGNALER DES BOGUES
-
- COPYRIGHT
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:05:54 GMT, September 19, 2025