SYNOPSIS
find [-H] [-L] [-P] [-D option-debogage] [-Oniveau] [chemin...] [expression]DESCRIPTION
Cette page de manuel documente la version GNU de find. GNU find parcourt les arborescences des répertoires de chacun des chemins mentionnés, en évaluant les expressions fournies pour chaque fichier rencontré. L'évaluation de l'expression se fait 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 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. Cette documentation, fournie par findutils, s'appelle Finding Files (en anglais). Elle contient bien plus de détails et d'explications que cette page de manuel, et peut donc être considérée comme une source d'informations plus utile.
OPTIONS
Les options -H, -L et -P contrôlent le traitement des liens symboliques. Les paramètres de la ligne de commande qui les suivent sont considérés comme des fichiers ou des répertoires à examiner, et ce jusqu'au premier paramètre qui commence par « - », « ( » ou « ! ». Ce paramètre, et tous ceux qui suivent, sont considérés comme décrivant ce qui doit être recherché. Si aucun chemin n'est précisé, c'est le répertoire courant qui est utilisé. Si aucune expression n'est donnée, c'est l'ordre -print qui est utilisé (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 (sachant qu'il est en général plus sûr de faire commencer les chemins de recherche par « ./ » ou « / » lorsque vous utilisez des jokers).
- -P
-
Ne jamais suivre les liens symboliques, ce qui est le comportement par
défaut. Quand find analyse ou affiche les informations concernant un
fichier, et que ce fichier est un lien symbolique, les informations
utilisées sont celles qui concernent le lien symbolique lui-même (et non le
fichier pointé).
- -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 prédicats -lname et
-ilname renvoient toujours faux lors de l'utilisation de -L.
- -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 (et non du fichier pointé). 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 ê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ée. Ces options modifient aussi la façon dont les paramètres sont traités. Plus précisément, il existe un certain nombre de tests qui comparent les fichiers listés sur la ligne de commande et le fichier en cours d'analyse. Dans tous les cas de figure, un fichier de la ligne de commande a été analysé et certaines de ses caractéristiques ont été mémorisées. Si le fichier indiqué est en fait un lien symbolique, et que l'option -P est active (ou que ni -H ni -L n'ont été précisées), alors l'information qui sera utilisée pour les comparaisons sera extraite des propriétés du lien symbolique. Sinon, elle sera extraite des propriétés du fichier pointé par le lien. Si find ne peut suivre le lien (soit parce ce qu'il ne dispose pas des privilèges suffisants, soit parce que le lien pointe vers un fichier inexistant), alors ce sont les propriétés du lien lui-même qui seront utilisées.
Quand les options -H ou -L sont actives, tout lien symbolique donné comme paramètre à -newer sera déréférencé, et le timestamp utilisé sera celui du fichier pointé par le lien symbolique. Ceci 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-debogage
-
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 debogage devra utiliser des virgules comme séparateurs. La
compatibilité des options de debogage n'est pas garantie au fil des versions
de findutils. La sortie de find -D help permet d'obtenir la liste
complète des options reconnues. Les options de debogage valides comportent
-
- help
- Décrire les options de debogage.
- tree
- Afficher l'arbre de l'expression dans sa forme d'origine et sa forme optimisée.
- stat
- Afficher des messages dès que des fichiers sont examinés via les appels systèmes stat et lstat. Le programme find tente de limiter ce type d'appels.
- 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.
-
- -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
bords. 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 par exemple) 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 traitent d'informations stockées dans l'inode. Sur les 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.
- 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.
EXPRESSIONS
L'expression est constituée d'options (affectant l'ensemble des opérations plutôt que le traitement d'un fichier particulier, et renvoyant toujours vrai), de tests (renvoyant une valeur vraie ou fausse), et d'actions (ayant des effets de bords et renvoyant une valeur vraie ou fausse), tous ces éléments étant séparés par des opérateurs. Quand un opérateur est manquant, l'opération par défaut -and est appliquée.Si l'expression ne contient pas d'action autre que -prune, find applique l'action -print par défaut à tous les fichiers pour lesquels l'expression est vraie.
OPTIONS
Toutes les options renvoient toujours la valeur vraie. Excepté pour -daystart, -follow et -regextype, elles ont toujours un effet global, même sur les tests indiqués avant l'option. En effet, les options sont traitées au moment où la ligne de commande est analysée, tandis que les tests ne font rien avant que les fichiers ne soient examinés. Les options -daystart, -follow et -regextype sont différentes à cet égard, et ne s'appliqueront que sur les tests qui apparaissent plus tard sur la ligne de commande. De ce fait, pour améliorer la lisibilité, il est préférable de les placer au début de l'expression. Vous recevrez un avertissement dans les autres cas.
- -d
-
Un synonyme de -depth, dans un but de compatibilité avec FreeBSD, NetBSD,
MacOS X et OpenBSD.
- -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.
- -depth
-
Traiter d'abord les sous-répertoires avant le répertoire lui-même. L'action
delete implique aussi -depth.
- -follow
-
Obsolète, utilisez plutôt l'option -L à la place. Déréférence les liens
symboliques. Ceci 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 que le type du lien lui-même. Les prédicats -lname et -ilname
renvoient toujours faux lorsqu'on utilise -follow.
- -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).
- -maxdepth n
-
Descendre au plus à n niveaux de profondeur des répertoires (n étant un entier positif ou nul), dans les paramètres fournis sur la ligne de commande. -maxdepth 0 signifie que les tests et les actions ne s'appliquent qu'aux paramètres de la ligne de commande.
- -mindepth n
-
Ne pas appliquer les tests ou les actions à des niveaux de profondeur
inférieurs à n. n est un entier positif ou nul. -mindepth 1
signifie que les tests et les actions s'appliquent à tous les fichiers sauf
aux paramètres de la ligne de commande.
- -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 ignorant que les répertoires sont supposés contenir
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 rencontré le nombre
prévu de sous-répertoires, il est donc sûr que le reste des entrées est
constitué de fichiers autres que des sous-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.
- -regextype type
-
Définir la syntaxe des expressions rationnelles des tests -regex et
-iregex qui seront indiqués plus loin sur la ligne de commande. Les types
actuellement implémentés sont emacs (type par défaut), posix-awk,
posix-basic, posix-egrep et posix-extended.
- -version, --version
-
Afficher le numéro de version de find et quitter.
- -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.
- -xdev
-
Ne pas parcourir les répertoires situés sur d'autres systèmes de fichiers.
TESTS
Quelques tests (comme -newerXYet -samefile par exemple) permettent de comparer le fichier en cours d'examen et un fichier de référence indiqué sur la ligne de commande. Quand ces tests sont utilisés, l'analyse du fichier de référence est soumis aux effets des options -H, -L , -P et tout -follow précédent. Par contre, ce fichier de référence n'est consulté qu'une fois, au moment où la ligne de commande est interprétée. Si ce fichier de référence ne peut pas être analysé (par exemple si l'appel système stat(2) échoue), un message d'erreur sera généré, et la commande find s'interrompra avec un statut différent de zéro.Les paramètres numériques peuvent être indiqués comme suit :
- +n
- supérieur à n,
- -n
- inférieur à n,
- n
- strictement égal à n.
- -amin n
-
Dernier accès au fichier il y a n minutes.
- -anewer fichier
-
Dernier accès au fichier plus récent que la dernière modification de
fichier. Si le fichier est un lien symbolique et que les options -H
ou -L sont actives, c'est toujours la date de dernier accès du fichier
pointé qui est utilisée.
- -atime n
-
Dernier accès au fichier il y a n*24 heures. Lorsque find calcule le
nombre de périodes de 24 heures depuis lequel le fichier a été accédé, la
partie fractionnelle est ignorée. Ainsi, pour correspondre à -atime
+1, un fichier doit avoir été accédé il y a au moins deux jours.
- -cmin n
-
Date de dernière modification du statut du fichier il y a n minutes.
- -cnewer fichier
-
Date de dernière modification du statut du fichier plus récente que la date
de dernière modification du fichier donné. Si le fichier donné est un
lien symbolique et que les options -H ou -L sont actives, alors c'est
la date de dernière modification du statut du fichier pointé par le lien qui
est considérée.
- -ctime n
-
Date de dernière modification du statut du fichier il y a n*24
heures. Consultez l'explication concernant -atime pour comprendre comment
les effets d'arrondis altèrent l'interprétation de la date de dernière
modification du statut du fichier.
- -empty
-
Fichier vide. De plus, ce fichier doit être régulier ou être 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
valides 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 de GID numérique valant 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. Dans
ces motifs, et contrairement à l'expansion des noms de fichiers de
l'interpréteur de commandes, un « . » initial peut correspondre au motif
« * ». Ainsi, find -name *to acceptera le fichier « .toto ». Notez
bien que vous devez protéger les motifs, cela va sans dire, car sinon,
l'interpréteur de commandes appliquera l'expansion aux métacaractères qu'ils
contiennent.
- -inum n
-
Fichier dont le numéro d'inode est n. Il est en général plus facile
d'utiliser le test -samefile.
- -ipath motif
-
Se comporter comme -iwholename. Cette option est obsolète, veuillez ne
plus l'utiliser.
- -iregex motif
-
Semblable à -regex, mais sans différencier les majuscules et les
minuscules.
- -iwholename motif
-
Semblable à -wholename, mais la recherche n'est pas sensible à la casse.
- -links n
-
Fichier ayant n liens.
- -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 n minutes.
- -mtime n
-
Fichier dont les données ont été modifiées il y a n*24 heures. Consultez
l'explication sur -atime pour comprendre comment les arrondis affectent
l'interprétation des dates de dernière modification des fichiers.
- -name motif
-
Fichier dont le nom de base (sans les répertoires du chemin d'accès),
correspond au motif du shell. Les métacaractères (« * », « ? », et « [] ») peuvent correspondre à un point « . » au début du nom du fichier
(c'est une évolution de findutils-4.2.2, consultez la section CONFORMITÉ AUX
STANDARDS plus loin). Pour ignorer un répertoire, ainsi que tous ses
fichiers, utilisez l'option -prune (vous trouverez un exemple dans la
description de l'option -path). 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 guillemets afin d'éviter l'expansion des métacaractères par
l'interpréteur de commandes.
- -newer fichier
-
Fichier modifié plus récemment que le fichier indiqué. Si le fichier
fichier 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
-
Compare le timestamp du fichier courant avec la référence. L'argument
référence est habituellement un nom de fichier (dans ce cas, un de ses
timestamps est utilisé pour les comparaisons), mais il peut aussi s'agir
d'une chaîne donnant un temps absolu. X et Y sont des emplacements
pour d'autres lettres, lettres qui indiquent quel horodatage de la
référence est utilisé pour la comparaison.
a La date et l'heure de dernier accès au fichier référence B La date et l'heure de création du fichier référence c La date et l'heure de changement d'état de l'inode référence m La date et l'heure de dernière modification du fichier référence t référence est directement interprétée en tant qu'heure Certaines combinaisons ne sont pas valables, comme par exemple, X utilisé avec t. Certaines combinaisons ne sont pas implémentées sur certains systèmes, comme par exemple B qui n'est pas supportée par tous les systèmes. Une erreur fatale sera retourné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 du 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 un résultat pour un répertoire appelé « ./src/misc » (s'il existe). Pour omettre une branche complète de répertoires, utilisez -prune plutôt que de vérifier chaque fichier de l'arborescence. Pour ignorer par exemple le répertoire « src/emacs » et tous ses fichiers et sous-répertoires tout en affichant le nom des autres fichiers trouvés, faites quelque chose comme :
find . -path './src/emacs' -prune -o -print
Sachez que le motif de recherche de correspondance s'applique sur le nom complet du fichier, en commençant des points de départ indiqués sur la ligne de commande. L'utilisation d'un chemin absolu n'a de sens ici que si le point de départ de recherche est lui aussi un chemin absolu. Cela signifie que la commande suivante ne trouvera jamais rien :
find bar -path /truc/bidule/monFichier -print
Le prédicat -path est aussi implémenté dans le find d'HP-UX et apparaîtra dans une prochaine version du standard POSIX. - -perm mode
-
Fichier dont les autorisations d'accès sont fixées exactement au mode
indiqué (en notation symbolique ou octale). Puisqu'une correspondance
stricte est requise, vous risquez d'être obligés d'utiliser une chaîne de
caractères plutôt compliquée lorsque vous utiliserez cette option avec le
mode symbolique. -perm g=w, par exemple, ne recherchera que les fichiers
qui ont le mode 0020 (c'est à dire, ceux pour lesquels la permission
d'écriture pour le groupe est la seule permission définie). Vous voudrez
plus certainement utiliser les formes « / » ou « - », telles que -perm
-g=w, qui correspondent à tous les fichiers qui ont le droit d'écriture
pour les groupes. Consultez la section EXEMPLES pour des exemples plus
significatifs.
- -perm -mode
-
Fichier ayant tous les bits d'autorisations indiqués dans le mode. Les
notations symboliques sont acceptées dans ce cas, et c'est en général comme
cela que l'on veut s'en servir. Vous devez indiquer « u », « g » ou « o » si vous utilisez un mode symbolique. Consultez la section EXEMPLES
pour des exemples plus significatifs.
- -perm /mode
-
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 plus cohérent avec le comportement de
perm -000).
- -perm +mode
-
Déconseillé, ancienne méthode pour rechercher des fichiers ayant certains
des bits d'autorisations indiqués dans le mode. Vous devez plutôt
utiliser -perm /mode. L'utilisation de la syntaxe « + » avec la
notation symbolique vous réservera des résultats surprenants. Par exemple,
« +u+x » est une notation symbolique valide (équivalente à +u,+x,
c'est-à-dire 0111) qui ne sera donc pas évaluée en tant que -perm
+mode, mais plutôt comme l'option de recherche exacte -perm
mode. Cela correspondra donc aux fichiers avec la permission « 0111 »
précisément, et non ceux qui ont n'importe quel bit d'exécution activé. Si
vous ne trouvez pas ce paragraphe clair, vous n'êtes pas le seul. Utilisez
plutôt -perm /mode. Cet emploi du test -perm est déconseillé parce
que la spécification POSIX requiert l'interprétation du premier « + » en
tant que partie de la notation symbolique. Nous avons donc préféré
l'utilisation de « / ».
- -readable
-
Correspond aux fichiers qui sont accessibles en lecture. Les listes de
contrôle d'accès (ACL) et les autres artefacts de permissions sont pris en
compte, à l'inverse du test -perm qui, lui, les ignore. Ce test utilise
l'appel système access(2), et peut, de ce fait, être trompé par les
serveurs NFS qui font de la substitution d'identité (UID mapping ou root
squashing). En effet, de nombreux systèmes implémentent access(2) au
niveau du client, et ne peuvent donc se servir des substitutions d'identités
gérées du coté serveur.
- -regex motif
-
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. L'option -regextype permet d'en
changer.
- -samefile nom
-
Fichier qui se réfère à la même inode que nom. Quand -L est actif,
cela inclut les liens symboliques.
- -size n[cwbkMG]
-
Fichier utilisant n unités d'espace. 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 kilo-octets (unités de 1 024 octets).
- « M »
- Pour des méga-octets (unités de 1 048 576 octets).
- « G »
- Pour des giga-octets (unités de 1 073 741 824 octets).
-
-
La taille ne prend pas en compte les blocs indirects, mais elle comptabilise
les blocs des fichiers creux non encore alloués. Gardez à l'esprit que les
spécifications de format « %k » et « %b » de -printf gèrent
différemment les fichiers éparpillés. Le suffixe « b » détermine toujours
des blocs de 512 octets et jamais de 1 kilo-octets, ce qui diffère du
comportement de -ls.
- -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 régulier
- l
- Lien symbolique, n'est jamais vrai si les options -L ou -follow sont actives, à moins que le lien symbolique ne soit cassé. Si vous voulez rechercher des liens symboliques alors que -L est actif, utilisez -xtype.
- s
- Socket
- D
- Door (Solaris)
-
- -uid n
-
Fichier dont l'identifiant utilisateur numérique vaut n.
- -used n
-
Fichier dont le dernier accès date de n jours après sa date de dernière
modification.
- -user utilisateur
-
Fichier appartenant à l'utilisateur indiqué (identifiant utilisateur
numérique éventuellement).
- -wholename motif
-
Voir -path. Cette option est moins portable que -path.
- -writable
-
Correspond aux fichiers qui sont accessibles en écriture. Les listes de
contrôle d'accès (ACL) et les autres artefacts de permissions sont pris en
compte, à l'inverse du test -perm qui, lui, les ignore. Ce test utilise
l'appel système access(2), et peut, de ce fait, être trompé par les
serveurs NFS qui font de la substitution d'identité (UID mapping ou root
squashing). En effet, de nombreux systèmes implémentent access(2) au
niveau du client, et ne peuvent donc se servir des substitutions d'identités
gérées du coté serveur.
- -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.
ACTIONS
- -delete
-
Effacer les fichiers, et renvoyer vrai si l'effacement a réussi. Si
l'effacement échoue, un message d'erreur est envoyé. Si -delete échoue,
le statut de sortie de find sera différent de zéro (si jamais il
s'interrompt). L'utilisation de l'action -delete active automatiquement
l'option -depth.
Attention : N'oubliez pas que la ligne de commande de find est évaluée comme une expression. Écrire -delete en premier forcera find à essayer d'effacer tout ce qui se trouve dans les points de départ que vous avez indiqué. Lorsque vous testez une ligne de commande de find qui utilisera -delete, vous devriez préciser l'option -depth afin d'éviter les surprises plus tard. Puisque -delete entraîne -depth, vous ne pouvez pas utiliser en même temps -prune et -delete.
- -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, ceci 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 le shell, 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 le
fichier sélectionné, mais en ajoutant le nom de chaque fichier trouvé à la
fin de la ligne de commande. Le nombre total d'invocation 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. La commande sera exécutée dans le
répertoire de départ.
- -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. 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 (avec
une restriction, chaque invocation de commande ne portera que sur une
liste de fichiers issue 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.
- -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ée, 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
aquiesce, 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.
-
La réponse à la question posée 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 étendues et
équivalencede classes).
- -okdir commande ;
-
Comme -execdir mais interroge d'abord l'utilisateur comme dans le cas de
-ok. Si l'utilisateur n'acquiesce pas, le test devient faux. Si la
commande est lancée, son entrée standard est redirigée depuis /dev/null.
-
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 caractère nul (à la place du caractère saut de ligne que -print
utilise). Ceci 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 indiqué 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és 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 attendiez. 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 ». Les valeurs possibles de k sont indiquées ci-dessous, certaines
d'entre-elles ne sont pas disponibles sur tous les systèmes, à cause des
différences entre les fonctions « strftime » 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). Accepte une partie décimale.
- T
- Heure au format 24 heures (hh:mm:ss)
- +
- La date et l'heure, séparées par un « + », « 2004-04-28+22:22:05 » par exemple. Ceci est une extension GNU. L'heure est donnée dans la zone horaire courante (qui peut être modifiée via la variable d'environnement TZ). Le second champ contient une partie décimale.
- X
- Représentation locale de l'heure (H:M:S)
- 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)
- h
- Identique à b
- j
- Jour de 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
- Les deux derniers chiffres de l'année (00..99)
- Y
- Année (1970...)
-
- %b
- Taille de l'espace disque consommé par le fichier, en nombre de blocs de 512 octets. Puisque l'espace disque est alloué par multiple de la taille d'un bloc du système de fichiers, on obtient souvent un résultat supérieur à %s/512. Il peut aussi être inférieur si le fichier est creux (sparse file).
- %c
- Date de dernière modification du statut du fichier, dans le format renvoyé par la fonction C « ctime ».
- %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 field de la structure stat) exprimé en décimal.
- %f
- Nom du fichier, sans aucun nom de répertoire (dernier élément uniquement).
- %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
- 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 rajoutera « . ».
- %H
- Paramètre de la ligne de commande à partir duquel le fichier a été trouvé.
- %i
- Numéro d'inode du fichier (en décimal).
- %k
- Taille du 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 éparpillé.
- %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 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 fichiers 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, en retirant le nom du paramètre de ligne de commande à partir duquel le fichier a été trouvé.
- %s
- Taille du fichier en octets.
- %S
- Densité du fichier, calculée par la formule (TAILLEBLOC*nb_bloc/taille_fichier). La valeur obtenue pour un fichier régulier d'une certaine taille dépend du système d'exploitation. Toutefois, la valeur normalement attendue pour un fichier creux (sparse file) est inférieure à 1.0, tandis qu'un fichier qui utilise l'indirection de blocs pourra obtenir une valeur supérieure à 1.0. 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 ».
- %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, pour les liens symbolique, de : L=boucle, N=inexistant.
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 le parcourir. Si l'option
-depth est utilisée : faux, aucun effet. Puisque -delete entraîne
-depth, vous ne pouvez pas utiliser conjointement -prune et
-delete.
- -quit
-
Arrêter immédiatement. Tous les processus fils seront arrêtés, et plus aucun
des chemins indiqués sur la ligne de commande ne sera traité. find
/tmp/toto /tmp/titi -print -quit n'affichera que /tmp/toto, par
exemple. Toute ligne de commande construite par -execdir ... {} + sera
exécutée avant l'arrêt de find. La valeur de retour sera ou ne sera pas
zéro, selon qu'une erreur ait eu lieu précédemment ou non.
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
-
Affiche 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 octal. 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 espaces 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.
OPÉRATEURS
Dans l'ordre de priorité décroissante :
- ( expr )
-
Forcer la précédence. 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 utilise 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 implicitement reliées par un ET ;
expr2 n'est pas évaluée si expr1 est fausse.
- 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.
CONFORMITÉ AUX STANDARDS
Définissez 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, Édition 2003) :
- -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. À l'heure
de findutils-4.2.2, les métacaractères du shell (« * », « ? » ou « [] » par exemple) trouveront les fichiers commençant par « . »
(l'interprétation d'IEEE PASC 126 l'impose). Ceci diffère des versions
précédentes de findutils.
- -type
-
Gérée. POSIX définit « b », « c », « d », « l », « p », « f » et
« s ». Le find du GNU gère aussi « D », ce qui représente une Porte,
pour les systèmes d'exploitation qui en fournissent.
- -ok
-
Gérée. L'interprétation de la réponse est soumise aux schémas ('patterns')
choisis 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é. Ceci est différent du comportement précédent, qui prenait en
compte les valeurs de temps 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 compatibilité.
- Autres prédicats
-
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 « and » et « or » (-a, -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 du find du GNU.
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 supérieurs sera souvent inférieur à celui attendu. Cela peut être dû au fait que le find du GNU optimise l'accès en évitant de parcourir un sous-répertoire qui s'avère être un lien vers un répertoire supérieur. 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 or -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'oeuvre dans l'option -name. Le find du GNU
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
crochet 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 INHABITUELS'.
- 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 stderr doivent être des messages de diagnostic et ne doivent être générés que dans le cas d'une sortie avec un statut différent de zéro.
- Lorsque POSIXLY_CORRECT n'est pas définie, -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éfinie, 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
find /tmp -name noyau -type f -print | xargs /bin/rm -fChercher les fichiers qui s'appellent noyau dans le répertoire /tmp et ses sous-répertoires, puis les effacer. Rappelez-vous que vous pouvez rencontrer des problèmes si des noms de fichiers comportent des retours à la ligne, des guillemets simples ou doubles, ou des espaces.
find /tmp -name noyau -type f -print0 | xargs -0 /bin/rm -f
Chercher les fichiers qui s'appellent noyau 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 retours à la ligne, des guillemets simples ou doubles ou des espaces soient correctement traités. Le test -name est prioritaire sur le test -type afin d'éviter l'appel de stat(2) pour chacun des fichiers.
find . -type f -exec file '{}' \;Exécuter « file » sur chaque entrée du répertoire courant ou de ses sous-répertoires. Attention à bien protéger les accolades par des guillemets simples afin d'empêcher leur interprétation en tant que ponctuation du script shell. 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.
find / \ \( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \ \( -size +100M -fprintf /root/grand.txt %-10s %p\n \)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 $HOME -mtime 0Rechercher les fichiers de votre répertoire personnel qui ont été modifiés lors des dernières vingt-quatre heures. Cette commande s'exprime de cette façon parce que la recherche utilise le résultat de la division entière par 24 de l'heure de dernière modification (la fraction horaire est donc perdue). Ce qui veut dire que pour correspondre à -mtime 0, un fichier doit avoir une antériorité de modification inférieure à 24 heures.
find /sbin /usr/sbin -executable \! -readable -printRechercher les fichiers qui offrent le droit d'exécution, mais qui ne sont pas lisibles.
find . -perm 664Rechercher 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. 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) ne seront pas sélectionnés.
find . -perm -664Rechercher 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). Un fichier ayant par exemple les droits 0777 sera sélectionné.
find . -perm /222Rechercher les fichiers qui offrent le droit d'écriture à quelqu'un (son propriétaire, ou son groupe, ou bien encore n'importe qui).
find . -perm /220 find . -perm /u+w,g+w find . -perm /u=w,g=wCes 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 commandes recherchent tous les fichiers dans lesquels soit le propriétaire soit le groupe peut écrire. Ces fichiers n'ont pas à offrir à la fois le droit d'écriture au propriétaire et au groupe, l'un ou l'autre suffira.
find . -perm -220 find . -perm -g+w,u+wCes commandes font toutes deux la même chose, c'est-à-dire rechercher les fichiers qui offrent le droit d'écriture au propriétaire ainsi qu'au groupe.
find . -perm -444 -perm /222 ! -perm /111 find . -perm -a+r -perm /a+w ! -perm /a+xCes commandes recherchent toutes 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)
cd /source-dir find . -name .snapshot -prune -o \( \! -name *~ -print0 \)| cpio -pmd0 /dest-dirCette commande copie le contenu de /source-dir dans /dest-dir, sauf les fichiers et répertoires s'appelant .snapshot (et tout ce qu'ils contiennent). Elle ne copie pas non plus les fichiers ou répertoires dont le nom finit par ~, mais copie par contre leur contenu. La structure -prune -o \( ... -print0 \) est assez 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é). 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.
find repo/ -exec test -d {}/.svn -o -d {}/.git -o -d {}/CVS ; \ -print -prune
É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 :
repo/project1/CVS repo/gnu/project2/.svn repo/gnu/project3/.svn repo/gnu/project3/src/.svn repo/project4/.gitDans 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.
VALEURS 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.
HISTORIQUE
À l'heure de findutils-4.2.2, les métacaractères du shell (« * », « ? » ou « [] » par exemple) trouveront les fichiers commençant par « . » parce que l'interprétation d'IEEE POSIX 126 l'impose.-perm /MODE remplace la syntaxe -perm +MODE, qui est dépréciée depuis findutils-4.2.21. -perm /000 correspond maintenant à tous les fichiers plutôt qu'à aucun, comme dans findutils-4.3.3.
La gestion des nanosecondes dans les timestamps 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, comme dans findutils-4.3.11. Toutefois, find ne s'interrompra pas immédiatement. Dans les versions précédentes, le statut de sortie de find n'était pas modifié par l'échec de -delete.
Fonctionnalités | Ajoutées | Offertes dans |
-newerXY | 4.3.3 | BSD |
-D | 4.3.1 | |
-O | 4.3.1 | |
-readable | 4.3.0 | |
-writable | 4.3.0 | |
-executable | 4.3.0 | |
-regextype | 4.2.24 | |
-exec ... + | 4.2.12 | POSIX |
-execdir | 4.2.12 | BSD |
-okdir | 4.2.12 | |
-samefile | 4.2.11 | |
-H | 4.2.5 | POSIX |
-L | 4.2.5 | POSIX |
-P | 4.2.5 | BSD |
-delete | 4.2.3 | |
-quit | 4.2.3 | |
-d | 4.2.3 | BSD |
-wholename | 4.2.0 | |
-iwholename | 4.2.0 | |
-ignore_readdir_race | 4.2.0 | |
-fls | 4.0 | |
-ilname | 3.8 | |
-iname | 3.8 | |
-ipath | 3.8 | |
-iregex | 3.8 |
FAUX BOGUES
$ find . -name *.c -print find : les chemins doivent précéder l'expression Syntaxe : find [-H] [-L] [-P] [-Oniveau] [-D help|tree|search|stat|rates|opt|exec] [CHEMIN...] [EXPRESSION]
Cette erreur survient parce que *.c a été interprété par le shell, et que la commande find a en fait reçu une ligne de commande qui ressemblait à :
find . -name bigram.c code.c frcode.c locate.c -printCette commande ne peut bien sûr en aucun cas fonctionner. Plutôt que de vous y prendre de cette façon, vous pourriez protéger votre motif de recherche par des guillemets ou protéger les caractères jokers :
$ find . -name \*.c -print
BOGUES
Des problèmes de sécurité se posent, inhérent au comportement de find tel que définit par le standard POSIX, et qui ne peuvent donc être résolus. Par exemple, l'action -exec est dangereuse par nature, et l'usage de -execdir est préférable. Consultez plutôt Finding Files pour plus de détails.
La variable d'environnement LC_COLLATE n'a aucun effet sur l'action -ok.
La meilleure façon de signaler un bogue est d'utiliser le formulaire en ligne sur http://savannah.gnu.org/bugs/?group=findutils. L'intérêt de cette méthode est que vous pourrez ensuite suivre l'évolution de la résolution du problème. Tout autre commentaire concernant find(1) et le paquet findutils en général peut être envoyé à la liste de diffusion bug-findutils. Pour vous abonner à cette liste, envoyez un courriel à [email protected].
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe Blaess entre 1997 et 2003. La version présente dans Debian est dorénavant maintenue par Sylvain Cherrier <sylvain DOT cherrier AT free DOT fr> et les membres de la liste <debian-l10n-french AT lists DOT debian DOT org>. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr-extra.