Question 1À quoi correspond le wildcard * ?
Trouver des fichiers — find et les wildcards
Apprends à désigner plusieurs noms de fichiers d'un coup avec les wildcards * ? [], et comment find cherche par nom avec -name et par type avec -type — tout en pratique dans un terminal en navigateur.
Les wildcards — * ? []
Les wildcards sont des symboles pour désigner en masse une partie d'un nom de fichier.
* correspond à une suite de zéro caractère ou plus, ? correspond à exactement un caractère, et [] correspond à l'un quelconque des caractères entre les crochets.
Combine-les avec ls, comme ls *.txt, pour lister uniquement les noms qui correspondent.
* correspond à n'importe quelle suite, ? à un caractère, et [] à l'un quelconque des caractères entre les crochets.| Symbole | Ce à quoi il correspond | Exemple | Fichiers correspondants |
|---|---|---|---|
* | Une suite de zéro caractère ou plus | *.txt | a.txt note.txt |
? | Exactement un caractère | log?.txt | log1.txt (log10.txt ne correspond pas) |
[...] | L'un quelconque des caractères entre les crochets | log[12].txt | log1.txt log2.txt |
[a-c] | L'un quelconque des caractères de l'intervalle | f[a-c].txt | fa.txt fb.txt fc.txt |
touch a.txt b.txt note.log # crée les fichiers de travail
ls *.txt # a.txt b.txt
ls *.log # note.log
ls ?.txt # a.txt b.txt (un caractère + .txt)
Un caractère ou un choix — ? et []
? correspond toujours à exactement un caractère, donc utilise-le quand tu veux fixer le nombre de caractères.
[] correspond à l'un quelconque des caractères écrits entre les crochets, donc [12] vaut 1 ou 2, et tu peux écrire un intervalle comme [a-c].
Ils filtrent les cibles plus finement que *.
touch log1.txt log2.txt log9.txt logA.txt # crée le matériel
ls log?.txt # les 4 avec un caractère final
ls log[12].txt # uniquement log1.txt log2.txt
Chercher par condition — find -name / -type
find parcourt récursivement sous un répertoire de départ et cherche les éléments qui remplissent une condition.
Avec find depart -name 'motif' tu poses une condition sur le nom, et avec -type f (fichier) ou -type d (répertoire) tu poses une condition sur le type.
Utilise-le pour trouver des fichiers par nom quand ils sont enfouis profondément dans la hiérarchie.
| Condition | Signification | Exemple |
|---|---|---|
-name 'motif' | Le nom correspond au motif | find . -name '*.log' |
-type f | Fichiers ordinaires uniquement | find . -type f |
-type d | Répertoires uniquement | find . -type d |
-name filtre par motif de nom, -type f par fichier, et -type d par répertoire.mkdir -p tree/sub # crée l'arborescence de travail
touch tree/a.txt tree/sub/b.txt # place des fichiers dans la hiérarchie
find tree -name '*.txt' # cherche les .txt sous tree récursivement
find tree -type d # uniquement les répertoires sous tree
Mets le motif de find entre guillemets
Entoure le '*.txt' dans find . -name '*.txt' de guillemets simples.
Sans guillemets, le shell développe * d'abord, ce qui peut viser autre chose que ce que tu voulais.
La règle de base est de mettre le motif de -name entre guillemets et de le passer à find lui-même.
Vérification des connaissances
Répondez à chaque question une par une.
Question 2À quels fichiers correspond ls log[12].txt ?
Question 3Qu'est-ce qui s'affiche quand tu lances find tree -type d ?