find - Rechercher des fichiers dans une hiérarchie de répertoires
find [
-H] [
-L] [
-P] [
-D
options_débogage] [
-Oniveau] [
point-départ...] [
expression]
Cette page de manuel documente la version GNU de
find. GNU
find
parcourt les arborescences des répertoires ayant pour racine chaque
point de départ donné en évaluant l'expression de gauche
à droite, en suivant les règles de priorité
décrites dans la section OPÉRATEURS, jusqu'à l'obtention
du résultat (par exemple la partie gauche est fausse pour un
opérateur
et, vraie pour un opérateur
ou), puis
find passe au nom de fichier suivant. Si aucun point de départ
n'est spécifié, « . » est
présumé.
Si vous utilisez
find dans un environnement dans lequel la
sécurité est importante (si vous l'utilisez par exemple pour
faire des recherches dans des répertoires qui sont accessibles en
écriture à d'autres utilisateurs), vous devriez lire le chapitre
« Security Considerations » de la documentation de
findutils qui s'appelle
Finding Files et qui est fournie par
findutils. Ce document contient bien plus de détails et
d'explications que cette page de manuel et peut donc être
considérée comme une source d'informations plus utile.
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.
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 régulière
intervenant plus tard sur la ligne de commande.
- Opérateurs
- Les opérateurs sont ajoutés aux autres
éléments dans une expression. On y trouve par exemple
-o (pour l'option logique OU) et -a (pour l'option logique
ET). -a est supposé quand aucun opérateur n'est
spécifié.
L'action
-print s'effectue sur tous les fichiers pour lesquels
l'expression entière est vrai, sauf si elle contient une autre action
que
-prune ou
-quit. Les actions qui désactivent le
-print par défaut sont
-delete,
-exec,
-execdir,
-ok,
-okdir,
-fls,
-fprint,
-fprintf,
-ls,
-print et
-printf.
L'action
-delete agit aussi comme une option (puisqu'elle implique
-depth).
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
- Définir 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
régulière 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
régulière.
-
-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.
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'exluent 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.
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 majuscules et les minuscules.
-
-iregex motif
- Semblable à -regex, mais sans
différencier les majuscules et les minuscules.
-
-iwholename motif
- Voir -ipath. Cette option est moins portable que
-ipath.
-
-links n
- Fichier ayant moins de, plus de ou
précisément n liens physiques.
-
-lname motif
- Fichier représentant un lien symbolique, dont le
contenu correspond au motif indiqué. Lors du
développement des métacaractères,
« / » et « . » ne
sont pas traités différemment des autres caractères.
Si les options -L ou -follow sont actives, ce test renvoie
faux, sauf si le lien symbolique est cassé.
-
-mmin n
- Fichier dont les données ont été
modifiées il y a plus de, moins de ou précisément
n minutes.
-
-mtime n
- Fichier dont les données ont été
modifiées il y a moins de, plus de ou précisément
n*24 heures. Consultez l'explication sur -atime pour
comprendre comment les arrondis affectent l'interprétation des
dates de modification des fichiers.
-
-name motif
- Fichier dont le nom de base (chemin sans le
répertoire parent) correspond au motif du shell. Les
répertoires parent étant supprimés, les noms de
fichier englobés dans une recherche avec -name n'incluront
jamais de barre oblique, donc « -name a/b » ne
trouvera rien (vous devrez probablement utiliser plutôt
-path). Un avertissement apparaît si vous essayez de le
faire, sauf si la variable d'environnement POSIXLY_CORRECT est
définie. Les métacaractères
(« * », « ? », et
« [] ») peuvent correspondre à un point
« . » au début du nom du fichier (c'est
une évolution de findutils-4.2.2, consultez la section
CONFORMITÉ AUX STANDARDS ci-dessous). Pour ignorer un
répertoire, ainsi que tous ses fichiers, utilisez l'option
-prune plutôt que de vérifier chaque fichier de
l’arbre (vous trouverez un exemple dans la description de cette
action). Les parenthèses ne sont pas considérées
comme des caractères spéciaux, bien que certains
interpréteurs de commandes (dont le Bash) attribuent aux
parenthèses un rôle particulier. La correspondance avec le
nom du fichier est obtenue par l'utilisation de la fonction
fnmatch(3) de la bibliothèque. N'oubliez pas de
protéger votre motif entre des guillemets afin d'éviter 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
(excepté que « . » correspond avec
retour ligne). L'option -regextype permet d'en changer.
-
-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 kilooctets informatiques (KiO, unités de
1024 octets)
- « M »
- Pour des mégaoctets informatiques (MiO,
unités de 1024 * 1024 = 1048576 octets)
- « G »
- pour des gigaoctets informatiques (GiO, unités de
1024 * 1024 * 1024 = 1073741824 octets)
- 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
- directory
- 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.
-
-context motif
- (SELinux seulement) le contexte de sécurité
du fichier correspond au motif global.
- -delete
- Effacer les fichiers ou les repertoires 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 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 de ces tests.
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
- Saut de ligne.
- \r
- Retour chariot.
- \t
- Tabulation horizontale.
- \v
- Tabulation verticale.
- \0
- Caractère ASCII NUL.
- \\
- Un caractère « \ »
littéral.
- \NNN
- Le caractère ASCII dont le code est NNN (en
octal).
Un « \ » suivi de n'importe quel autre
caractère est traité comme un caractère
ordinaire ; ils sont donc affichés tous les deux.
- %%
- Un caractère pourcentage littéral (%).
- %a
- 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 (mm/jj/aaaa)
- h
- Identique à b
- j
- quantième du jour dans l'année
(001..366)
- m
- mois (01..12)
- U
- Numéro de la semaine dans l'année, les
semaines commençant le dimanche (00..53)
- w
- Jour de la semaine (0..6)
- W
- Numéro de la semaine dans l'année, les
semaines commençant le lundi (00..53)
- x
- Représentation locale de la date (mm/jj/aa)
- y
- deux derniers chiffres de l'année (00..99)
- Y
- Année (1970...)
- %b
- Taille de l'espace disque consommé par le fichier,
en nombre de blocs de 512 octets. Puisque l'espace disque est
alloué par multiple de la taille d'un bloc du système de
fichiers, on obtient souvent un résultat supérieur à
%s/512. Il peut aussi être inférieur si le fichier
est creux (sparse file).
- %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
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.
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.
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é, alors qu'on revient du dernier fichier
rencontré. Quand il détecte une boucle infinie, find
doit afficher un message de diagnostic sur la sortie d'erreur et essayer
de revenir à sa position d'origine ou s'arrêter.
La commande
find du GNU est conforme à cette exigence. Le
décompte des liens dans un répertoire qui contient des liens en
dur vers des répertoires parent sera souvent inférieur à
celui attendu. Cela peut être dû au fait que GNU
find
optimise l'accès en évitant de parcourir un
sous-répertoire qui s'avère être un lien vers un
répertoire parent. Bien que
find ne parcourt pas le
répertoire dans ce cas précis, il permet aussi d'éviter
l'émission d'un message d'avertissement. Cette façon de faire
peut sembler génératrice d'erreurs, mais il est peu probable que
quiconque puisse réellement en être gêné. Si
l'optimisation du parcours des feuilles (NDT : leaf) a
été désactivée avec
-noleaf, cette
entrée du répertoire sera bel et bien parcourue, et le message
d'avertissement émis si nécessaire. Les liens symboliques ne
peuvent pas servir à créer de telles boucles dans le
système de fichiers, par contre, si les options
-L ou
-follow sont actives, alors un message d'avertissement sera émis
quand
find rencontrera une boucle de liens symboliques. Comme pour les
boucles contenant des liens en dur, l'optimisation de parcours des feuilles
(NDT : leaf) signifie souvent que
find sait qu'il n'a pas
à appliquer
stat() ou
chdir() sur le lien symbolique et
donc que ce diagnostic est souvent inutile.
L'option
-d est gérée pour des raisons de
compatibilité avec divers systèmes BSD, mais
préférez plutôt l'utilisation de l'option
-depth
conforme à POSIX.
Le positionnement de la variable d'environnement
POSIXLY_CORRECT ne
modifie pas le comportement des tests
-regex ou
-iregex parce
que ces tests ne sont pas définis dans le standard POSIX.
- 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.
- •
- 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.
- •
- 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.
- •
- É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 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é.
- •
- 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 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 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).
- •
- 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.
- •
- 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]
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.
À 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 statut de sortie
non nul en cas d'échec, à partir de findutils-4.3.11. Toutefois,
find ne s'interrompra pas immédiatement. Dans les versions
précédentes, l’état de sortie de
find
n'était pas modifié par l'échec de
-delete.
Fonctionnalités |
Ajoutées |
Se passe aussi dans |
-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.
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é.
$ 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
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.
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 :
Les sujets généraux concernant le paquet GNU findutils sont
discutés sur la liste de diffusion
bug-findutils :
Copyright © 1990-2022 Free Software Foundation, Inc. License GPLv3+: GNU
GPL version 3 ou supérieure <
https://gnu.org/licenses/gpl.html>.
Ce programme est un logiciel libre. Vous pouvez le modifier et le redistribuer.
Il n'y a AUCUNE GARANTIE dans la mesure autorisée par la loi.
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
La traduction française de cette page de manuel a été
créée par Florentin Duneau <
[email protected]>, Jean-Luc
Coulon (f5ibh) <
[email protected]>, Sylvain Cherrier
<
[email protected]>, Nicolas François
<
[email protected]>, Jean-Philippe MENGUAL
<
[email protected]> et Jean-Pierre Giraud
<
[email protected]>
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 à
[email protected]