La commande Linux et Unix trouver exécute une recherche de fichiers dans une hiérarchie de répertoires.
Syntaxe pour trouver commander:
trouver chemin … expression
La description
Cette page de manuel documente la version GNU de trouver . La commande trouver recherche dans l'arborescence de répertoires correspondant à chaque nom de fichier donné en évaluant l'expression donnée de gauche à droite, conformément aux règles de priorité (voir la section Opérateurs ci-dessous), jusqu'à ce que le résultat soit connu; en d'autres termes, le côté gauche est faux pour et opérations, vrai pour ou , à quel point trouver passe au nom de fichier suivant.
Le premier argument qui commence par:
- -
- ( ou ),
- !
est considéré comme le début de l'expression; les arguments qui le précèdent sont des chemins dans lesquels rechercher, et les autres arguments qui suivent sont le reste de l'expression. Si aucun chemin n'est indiqué, le répertoire en cours est utilisé. Si aucune expression n'est donnée, l'expression -impression est utilisé.
le trouver La commande quitte avec le statut 0 si tous les fichiers sont traités avec succès, supérieure à 0 si des erreurs se produisent.
Expressions
L’expression est composée d’options (qui affectent le fonctionnement général plutôt que le traitement d’un fichier spécifique, et renvoient toujours true), de tests (qui renvoient une valeur true ou false) et d’actions (qui ont des effets secondaires et renvoient une valeur true ou false). valeur fausse), tous séparés par des opérateurs. L'expression -et est supposé lorsque l'opérateur est omis. Si l'expression ne contient aucune action autre que -prune , puis -impression est effectuée sur tous les fichiers pour lesquels l'expression est vraie.
Les options
Toutes les options retournent toujours vrai. Ils prennent toujours effet et ne sont traités que lorsque leur place dans l'expression est atteinte. Par conséquent, pour plus de clarté, il est préférable de les placer au début de l'expression.
-jour | Mesurer les temps (pour -amin, -atime, -cmin, -ctime, -mmin, et -heure ) depuis le début d’aujourd’hui plutôt que depuis 24 heures. |
-profondeur | Traitez le contenu de chaque répertoire avant le répertoire lui-même. |
-suivre | Déréférencer les liens symboliques. Implique -noleaf . |
-Aidez-moi ou --Aidez-moi | Imprimez un résumé de l'utilisation de la ligne de commande par trouver et sortir. |
-profondeur max nombre | Descendez au plus grand nombre de niveaux (un entier non négatif) de répertoires sous les arguments de la ligne de commande. L'expression -maxdepth 0 signifie appliquer uniquement les tests et les actions aux arguments de la ligne de commande. |
-mindepth nombre | N'appliquez pas de tests ou d'actions à des niveaux inférieurs au nombre (nombre entier non négatif). L'expression -mindepth 1 signifie traiter tous les fichiers sauf les arguments de la ligne de commande. |
-monter | Ne descendez pas de répertoires sur d'autres systèmes de fichiers. Un autre nom pour -xdev , pour compatibilité avec d'autres versions de trouver . |
-noleaf | N'optimisez pas en supposant que les répertoires contiennent 2 sous-répertoires en moins que leur nombre de liens physiques. * |
-version ou --version | Imprimer le trouver numéro de version et quitter. |
-xdev | Ne descendez pas de répertoires sur d'autres systèmes de fichiers. |
* Cette option est nécessaire lors de la recherche de systèmes de fichiers ne respectant pas la convention de liens de répertoire Unix, tels que les systèmes de fichiers CD-ROM ou MS-DOS ou les points de montage de volumes AFS. Chaque répertoire d’un système de fichiers Unix normal comporte au moins 2 liens physiques: son nom et son nom. (période) entrée. En outre, ses sous-répertoires (le cas échéant) ont chacun. entrée liée à ce répertoire.
Quand trouver examine un répertoire. Après avoir créé deux sous-répertoires en moins que le nombre de liens du répertoire, il sait que le reste des entrées du répertoire ne sont pas des répertoires ( feuille fichiers dans l’arborescence). Si seuls les noms des fichiers doivent être examinés, il n'est pas nécessaire de les déclarer; cela donne une augmentation significative de la vitesse de recherche.
Des tests
Les arguments numériques peuvent être spécifiés comme suit:
+ n | Pour plus de n. |
-n | Pour moins de n. |
n | Pour exactement n. |
-amin n | Le dernier accès au fichier n il y a quelques minutes. |
-anewer fichier | Le dernier fichier a été consulté plus récemment que fichier a été modifié. -anewer est affecté par -follow uniquement si -follow vient avant -anewer sur la ligne de commande. |
-au moment n | Le dernier accès au fichier n * Il y a 24 heures. |
-cmin n | Le statut du fichier a été modifié pour la dernière fois n il y a quelques minutes. |
-cnewer fichier | Le statut du fichier a été modifié plus récemment que le fichier n'a été modifié.- cnewer est affecté par -suivre seulement si -suivre vient avant -une réponse sur la ligne de commande. |
-ctime n | Le statut du fichier a été modifié pour la dernière fois n * Il y a 24 heures. |
-vide | Le fichier est vide et est soit un fichier normal, soit un répertoire. |
-faux | Toujours faux. |
-fstype type | Le fichier est sur un système de fichiers du type spécifié. Les types de système de fichiers valides varient selon les versions d'Unix. une liste incomplète des types de systèmes de fichiers acceptés sur certaines versions d'Unix ou d'une autre est: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Vous pouvez utiliser -printf avec la directive% F pour voir les types de vos systèmes de fichiers. |
-gid n | L'ID de groupe numérique du fichier est n . |
-group gname | Le fichier appartient au groupe gname (l'ID de groupe numérique est autorisé). |
-ilname modèle | Comme -lname, mais la correspondance est insensible à la casse. |
-iname modèle | Comme -prénom , mais la correspondance est insensible à la casse. Par exemple, les motifs fo * et F?? faire correspondre les noms de fichiers Foo , FOO , foo , foo , etc. |
-inum n | Le fichier a un numéro d'inode n . |
-ipath modèle | Comme -chemin , mais la correspondance est insensible à la casse. |
-iregex modèle | Comme -regex, mais la correspondance est insensible à la casse. |
-liens n | Fichier a n liens. |
-lname modèle | Fichier est un lien symbolique dont le contenu correspond au motif du shell. Les métacaractères ne traitent pas / ou . spécialement. |
-mmin n | Les données du fichier ont été modifiées pour la dernière fois n il y a quelques minutes. |
-mtime n | Les données du fichier ont été modifiées pour la dernière fois n * Il y a 24 heures. |
-name modèle | La base du nom de fichier (le chemin avec les principaux répertoires supprimés) correspond au modèle du shell. Les métacaractères (*, ?, et ) ne correspondent pas à . au début du nom de la base. Pour ignorer un répertoire et ses fichiers, utilisez -prune ; voir un exemple dans la description de -chemin . |
-newer fichier | Le fichier a été modifié plus récemment que fichier . L'expression -la réponse est affecté par -suivre seulement si -suivre vient avant -la réponse sur la ligne de commande. |
-nouser | Aucun utilisateur ne correspond à l'ID utilisateur numérique du fichier. |
-nogroupe | Aucun groupe ne correspond à l'ID de groupe numérique du fichier. |
-path modèle | Le nom du fichier correspond au motif du shell modèle . Les métacaractères ne traitent pas / ou . spécialement; alors, par exemple,trouver . -path './sr*sc imprimera une entrée pour un répertoire appelé ./src/misc (s'il en existe un). Pour ignorer une arborescence de répertoires complète, utilisez -prune plutôt que de vérifier tous les fichiers de l’arbre. Par exemple, pour ignorer le répertoire src / emacs et tous les fichiers et répertoires qu'il contient, et imprimer les noms des autres fichiers trouvés, procédez comme suit:trouver . -path './src/emacs' -prune -o -print |
-perm mode | Les permissions du fichier sont exactement mode (octal ou symbolique). Les modes symboliques utilisent le mode 0 comme point de départ. |
-perm -mode | Tous les bits de permission mode sont définis pour le fichier. |
-perm + mode | N'importe lequel des bits de permission mode sont définis pour le fichier. |
-regex modèle | Le nom de fichier correspond à l'expression régulière modèle . Ceci est une correspondance sur tout le chemin, pas une recherche. Par exemple, pour faire correspondre un fichier nommé ./fubar3, vous pouvez utiliser l’expression régulière .*bar. ou . * b. * 3, mais non b. * r3. |
-size n bckw | Utilisation du fichier n unités d'espace. Les unités sont des blocs de 512 octets par défaut ou si b suit n , octets si c suit n , kilo-octets si k suit n , ou mots de 2 octets si w suit n . La taille ne compte pas les blocs indirects, mais elle compte les blocs des fichiers fragmentés qui ne sont pas réellement alloués. |
-vrai | Toujours vrai. |
-type c | Le fichier est de type c : |
b | Bloc (spécial) spécial |
c | Caractère spécial (sans tampon) |
ré | Annuaire |
p | Canal nommé (FIFO) |
F | Dossier régulier |
l | Lien symbolique |
s | Prise |
ré | porte (Solaris) |
-uid n | L'ID utilisateur numérique du fichier est n . |
-utilisé n | Le dernier accès au fichier n jours après la dernière modification de son statut. |
-utilisateur uname | Le fichier appartient à l'utilisateur ton nom (ID utilisateur numérique autorisé). |
-type c | Le même que -type sauf si le fichier est un lien symbolique. Pour les liens symboliques: si -suivre n'a pas été donné, true si le fichier est un lien vers un fichier de type c ; si -suivre a été donné, vrai si c est l. En d'autres termes, pour les liens symboliques, -type vérifie le type du fichier -type ne vérifie pas. |
actes
-exec commander ;
Exécuter commander ; true si le statut 0 est renvoyé. Tous les arguments suivants pourtrouver sont considérés comme des arguments de la commande jusqu'à un argument constitué de `; ' est rencontré. La chaîne «{}» est remplacée par le nom du fichier en cours de traitement, où qu’elle se trouve dans les arguments de la commande, et pas seulement dans les arguments où elle est seule, comme dans certaines versions detrouver. Il peut être nécessaire d’échapper à ces deux constructions (avec un '') ou de les citer pour les protéger de la dilatation du shell. La commande est exécutée dans le répertoire de départ.
-fls fichier
Vrai; comme -ls mais écris à fichier comme -fprint.
-fprint fichier
Vrai; imprimer le nom complet du fichier dans le fichier fichier . Si fichier n'existe pas quandtrouver est exécuté, il est créé; s'il existe, il est tronqué. Les noms de fichiers «/ dev / stdout» et «/ dev / stderr» sont traités spécialement; ils se réfèrent à la sortie standard et à la sortie d'erreur standard, respectivement.
-fprint0 fichier
Vrai; comme -print0 mais écrivez à fichier comme -fprint.
-fprintf fichier format
Vrai; comme -printf mais écrivez à fichier comme -fprint.
-D'accord commander ;
Comme -exec mais demande d'abord à l'utilisateur (sur l'entrée standard); si la réponse ne commence pas par «y» ou par «Y», n'exécutez pas la commande et renvoyez false.
-impression
Vrai; affiche le nom complet du fichier sur la sortie standard, suivi d’une nouvelle ligne.
-print0
Vrai; affiche le nom complet du fichier sur la sortie standard, suivi d'un caractère nul.Cela permet aux noms de fichiers contenant des nouvelles lignes d’être correctement interprétés par les programmes qui traitent les fichiers.trouver sortie.
-printf format
Vrai; impression format sur la sortie standard, interprétant les directives "" échappées et "%". Les largeurs de champ et les précisions peuvent être spécifiées comme avec la fonction C printf '. Contrairement à -print, -printf n'ajoute pas de nouvelle ligne à la fin de la chaîne. Les échappées et les directives sont:
une
Sonnette d'alarme.
b
Retour arrière.
c
Arrêtez immédiatement l’impression à partir de ce format et videz la sortie.
F
Formulaire d'alimentation.
n
Nouvelle ligne.
r
Retour de chariot.
t
Onglet horizontal
v
Onglet vertical
\
Un anti-slash littéral ("").
NNN
Le caractère dont le code ASCII est NNN (octal).
Un caractère "" suivi de tout autre caractère est traité comme un caractère ordinaire. Ils sont donc tous deux imprimés.
%%
Un signe de pourcentage littéral.
%une
Dernier accès du fichier au format renvoyé par la fonction C `ctime '.
%UNE k
Dernier accès du fichier au format spécifié par k , qui est soit "@", soit une directive pour la fonction C "strftime". Les valeurs possibles pour k sont énumérés ci-dessous; certains d'entre eux peuvent ne pas être disponibles sur tous les systèmes, en raison des différences de "strftime" entre les systèmes.
@
secondes depuis le 1er janvier 1970 à 00h00 GMT.
Champs temporels:
H
heure (00..23)
je
heure (01..12)
k
heure (0..23)
l
heure (1..12)
M
minute (00..59)
p
heure locale ou heure locale
r
heure, 12 heures (hh: mm: ss AP M)
S
seconde (00..61)
T
heure, 24 heures (hh: mm: ss)
X
Représentation de l'heure locale (H: M: S)
Z
fuseau horaire (par exemple, heure avancée de l'Est) ou rien si aucun fuseau horaire n'est déterminable
Champs de date:
une
le nom de semaine abrégé de l'environnement local (Sun..Sat)
UNE
nom complet du jour de la semaine de la localité, longueur variable (dimanche … samedi)
b
Nom abrégé du mois de l'environnement local (Jan..Dec)
B
nom complet du mois de la locale, longueur variable (janvier..décembre)
c
date et heure de la localisation (Sam 04 Nov 12:02:33 EST 1989)
ré
jour du mois (01..31)
ré
date (mm / jj / aa)
h
comme b
j
jour de l'année (001..366)
m
mois (01.12.12)
U
numéro de semaine de l'année avec dimanche comme premier jour de la semaine (00..53)
w
jour de la semaine (0..6)
W
numéro de semaine de l'année avec le lundi comme premier jour de la semaine (00..53)
X
Représentation date locale (mm / jj / aa)
y
deux derniers chiffres de l'année (00..99)
Y
année (1970 …)
% b
La taille du fichier en blocs de 512 octets (arrondis au maximum).
% c
La dernière heure de changement d'état du fichier dans le format renvoyé par la fonction C `ctime '.
% C k
La dernière heure de changement de statut du fichier dans le format spécifié par k , qui est le même que pour% A.
%ré
La profondeur du fichier dans l'arborescence de répertoires; 0 signifie que le fichier est un argument de ligne de commande.
%F
Nom du fichier avec tous les principaux répertoires supprimés (uniquement le dernier élément).
%F
Type du système de fichiers sur lequel se trouve le fichier; cette valeur peut être utilisée pour -fstype.
%g
Nom de groupe du fichier ou ID de groupe numérique si le groupe n'a pas de nom.
%G
ID de groupe numérique du fichier.
% h
Répertoires principaux du nom du fichier (tous sauf le dernier élément).
% H
Argument de ligne de commande sous lequel le fichier a été trouvé.
%je
Le numéro d'inode du fichier (en décimal).
% k
La taille du fichier en blocs de 1K (arrondis au maximum).
% l
Objet de lien symbolique (chaîne vide si le fichier n'est pas un lien symbolique).
% m
Bits d'autorisation du fichier (en octal).
% n
Nombre de liens physiques à classer.
% p
Nom du fichier.
% P
Le nom du fichier avec le nom de l'argument de la ligne de commande sous lequel il a été trouvé supprimé.
% s
La taille du fichier en octets.
% t
Heure de dernière modification du fichier dans le format renvoyé par la fonction C `ctime '.
% T k
Date de dernière modification du fichier dans le format spécifié par k , qui est le même que pour% A.
% u
Nom d'utilisateur du fichier ou ID utilisateur numérique si l'utilisateur n'a pas de nom.
% U
ID utilisateur numérique du fichier.
Un caractère «%» suivi de tout autre caractère est supprimé (mais l'autre caractère est imprimé).
-prune
Si -pth n'est pas donné, vrai; ne pas descendre le répertoire en cours.Si -depth est donné, faux; aucun effet. -ls Vrai; liste le fichier courant au format `ls -dils 'sur la sortie standard. Le nombre de blocs est de 1K, sauf si la variable d'environnement POSIXLY_CORRECT est définie, auquel cas des blocs de 512 octets sont utilisés. Liste par ordre de priorité décroissante: ( expr ) Forcer la préséance. ! expr Vrai si expr c'est faux. -ne pas expr Pareil que ! expr . expr1 expr2 Et (implicite); expr2 n'est pas évalué si expr1 c'est faux. expr1 -une expr2 Pareil que expr1 expr2 . expr1 -et expr2 Pareil que expr1 expr2 . expr1 -o expr2 Ou; expr2 n'est pas évalué si expr1 est vrai. expr1 -ou expr2 Pareil que expr1 -o expr2 . expr1 , expr2 Liste; tous les deux expr1 et expr2 sont toujours évalués. La valeur de expr1 est mis au rebut; la valeur de la liste est la valeur de expr2 . trouver / home -user joe
Trouvez tous les fichiers sous le répertoire / home appartenant à l'utilisateur joe. find / usr -name * stat
Recherchez tous les fichiers du répertoire / usr se terminant par ".stat". trouver / var / spool -mtime +60
Recherchez tous les fichiers du répertoire / var / spool modifié il y a plus de 60 jours. find / tmp -name core -type f -print | xargs / bin / rm -f
Trouver les fichiers nomméscoeur dans ou sous le répertoire/ tmp et supprimez-les.Notez que cela ne fonctionnera pas correctement s'il existe des noms de fichiers contenant des nouvelles lignes, des guillemets simples ou doubles ou des espaces. find / tmp -name core -type f -print0 | xargs -0 / bin / rm -f
Trouver les fichiers nomméscoeur dans ou sous le répertoire/ tmp et supprimez-les, en traitant les noms de fichiers de manière à ce que les noms de fichiers ou de répertoires contenant des guillemets simples ou doubles, des espaces ou des nouvelles lignes soient correctement gérés. le-prénom test vient avant la-type test afin d'éviter d'avoir à appelerstat (2) sur chaque fichier. trouver . -type f -exec fichier '{}' ;
Exécute `fichier 'sur chaque fichier situé dans ou sous le répertoire actuel. Notez que les accolades sont entourées de guillemets simples pour les protéger de l'interprétation en tant que ponctuation de script shell. Le point-virgule est pareillement protégé par l'utilisation d'une barre oblique inverse, bien que ';' aurait pu être utilisé dans ce cas aussi. find / (-perm -4000 -fprintf /root/suid.txt '% # m% u% p n' ), (-size + 100M -fprintf /root/big.txt '% -10s% p n' )
Parcourez le système de fichiers une seule fois, en listant les fichiers et répertoires setuid dans/root/suid.txt et de gros fichiers dans/root/big.txt. trouver $ HOME -mtime 0
Recherchez les fichiers de votre répertoire personnel modifiés au cours des dernières vingt-quatre heures. Cette commande fonctionne de cette manière car le temps écoulé depuis la dernière modification de chaque fichier est divisé par 24 heures et le reste est supprimé. Cela signifie que pour correspondre-heure 0, un fichier devra être modifié dans le passé il y a moins de 24 heures. trouver . -Perm 664
Recherchez les fichiers qui ont l'autorisation de lecture et d'écriture pour leur propriétaire et leur groupe, mais pour lesquels les autres utilisateurs peuvent lire sans écrire. Les fichiers qui répondent à ces critères mais pour lesquels d'autres bits d'autorisation sont définis (par exemple, si quelqu'un peut exécuter le fichier) ne seront pas mis en correspondance. trouver . -Perm -664
Recherchez les fichiers qui ont l'autorisation de lecture et d'écriture pour leur propriétaire et leur groupe, et que les autres utilisateurs peuvent lire, sans se soucier de la présence de bits d'autorisation supplémentaires (par exemple, le bit exécutable). Cela correspond à un fichier qui a le mode 0777, par exemple. trouver . -perm / 222
Recherchez des fichiers accessibles en écriture par quelqu'un (leur propriétaire, leur groupe ou quelqu'un d'autre). trouver . -perm / 220 trouver . -perm / u + w, g + w trouver . -perm / u = w, g = w
Ces trois commandes font la même chose, mais la première utilise la représentation octale du mode fichier et les deux autres utilisent la forme symbolique. Ces commandes permettent toutes de rechercher des fichiers accessibles en écriture par leur propriétaire ou leur groupe. Les fichiers ne doivent pas nécessairement être accessibles en écriture à la fois par le propriétaire et le groupe pour être appariés; soit fera l'affaire. trouver . -perm -220 trouver . -perm -g + w, u + w
Ces deux commandes font la même chose. rechercher des fichiers accessibles en écriture à la fois par leur propriétaire et leur groupe. trouver . -perm -444 -perm / 222! -perm / 111 trouver . -perm -a + r -perm / a + w! -perm / a + x
Ces deux commandes recherchent des fichiers lisibles par tout le monde (-perm -444 ou -perm -a + r), qui ont au moins le bit d'écriture défini (-perm / 222 ou -perm / a + w) mais ne sont pas exécutables. pour n'importe qui (! -perm / 111 et! -perm / a + x respectivement) Important: Utilisez le homme commande ( % homme ) pour voir comment une commande est utilisée sur votre ordinateur.Les opérateurs
Exemples