Provided by: manpages-fr_4.13-4_all 

NOM
glob - Développement des noms de fichiers
DESCRIPTION
Il y a bien longtemps, dans UNIX V6, existait un programme nommé /etc/glob qui permettait de développer
les motifs génériques dans les noms de fichiers. Ce programme devint bientôt une routine interne du
shell.
De nos jours, on trouve également une routine de bibliothèque nommée glob(3) qui effectue le même travail
en étant invoquée par un programme utilisateur.
Les règles de développement sont les suivantes (POSIX.2, 3.13).
Motifs génériques
Une chaîne est un motif générique si elle contient un ou plusieurs caractères parmi « ? », « * » et
« [ ». Le développement (globbing) est l'opération qui transforme un motif générique en une liste de noms
de fichiers correspondant à ce motif. La correspondance est définie ainsi :
Un « ? » (non inclus dans des crochets) correspond à n'importe quel caractère.
Un « * » (non inclus dans des crochets) correspond à n'importe quelle chaîne, y compris la chaîne vide.
Classes de caractères
Une expression du type « [...] », dans laquelle le premier caractère après le « [ » n'est pas un « ! »
est mise en correspondance avec un seul des caractères contenus entre les crochets. L'ensemble des
caractères cités ne peut pas être vide, ainsi, le crochet fermant « ] » peut être présent dans
l'ensemble, à la condition qu'il soit en première place. Par conséquent, la chaîne « [][!] » peut être
mise en correspondance avec l'un des trois caractères « [ », « ] » et « ! ».
Intervalles
Il existe une convention particulière, suivant laquelle deux caractères séparés par un tiret « - »
indiquent un intervalle. Ainsi, « [A-Fa-f0-9] » équivaut à « [ABCDEFabcdef0123456789] ». Pour inclure un
tiret au sens littéral, il suffit de l'utiliser en premier ou en dernier entre les crochets. Ainsi,
« []-] » correspond uniquement aux caractères « ] » et « - », et « [--0] » correspond aux trois
caractères « - », « . » et « 0 », puisqu'il ne peut y avoir de correspondance avec « / ».
Négation
Une expression « [!...] » correspond à n'importe quel caractère qui ne puisse pas être mis en
correspondance avec la chaîne obtenue en supprimant le « ! » initial (ainsi, « [!]a-] » correspond à tout
caractère sauf « ] », « a » et « - »).
On peut désactiver le comportement spécial des caractères « ? », « * » et « [ » en les faisant précéder
par une barre oblique inverse « \ », ou, dans le cas d'une ligne de commande shell, en les encadrant par
des guillemets. Entre crochets, ces caractères ne prennent que leur signification littérale. Ainsi,
« [[?*\] » correspond aux quatre caractères « [ », « ? », « * » et « \ ».
Chemins d'accès
Globbing is applied on each of the components of a pathname separately. A '/' in a pathname cannot be
matched by a '?' or '*' wildcard, or by a range like "[.-0]". A range containing an explicit '/'
character is syntactically incorrect. (POSIX requires that syntactically incorrect patterns are left
unchanged.)
Si un nom de fichier commence par un « . », ce caractère doit être mis en correspondance explicitement
(ainsi, rm * ne supprimera pas .profile, et tar c * n'archivera pas tous les fichiers ; tar c .serait
préférable).
Listes vides
La définition simple et élégante fournie plus haut « transformer un motif générique en une liste de noms
de fichiers correspondants » est la définition UNIX originale. Elle autorisait la présence de motif se
développant en listes vides, comme
xv -wait 0 *.gif *.jpg
alors qu'il n'y a peut-être aucun fichier *.gif présent (et on ne peut pas considérer cela comme une
erreur). Toutefois, POSIX réclame qu'un motif soit laissé inchangé s'il est syntaxiquement incorrect, ou
si la liste des noms de fichiers correspondants est vide. On peut forcer bash à adopter le comportement
classique en utilisant cette commande :
shopt -s nullglob
(Des problèmes similaires se produisent ailleurs. Par exemple, de vieux scripts avec
rm `find . -name "*~"`
devraient être remplacés par des nouveaux scripts contenant
rm -f nosuchfile `find . -name "*~"`
pour éviter les messages d'erreurs si rm est invoqué avec une liste vide d'arguments).
NOTES
Expressions rationnelles
Notez que les motifs génériques ne sont pas des expressions rationnelles bien qu'ils leur ressemblent.
Tout d'abord, ils correspondent à des noms de fichiers, et pas à du texte. De plus, les conventions ne
sont pas identiques. Par exemple, dans une expression rationnelle, « * » signifie zéro ou plusieurs
copies de l'élément précédent.
Now that regular expressions have bracket expressions where the negation is indicated by a '^', POSIX has
declared the effect of a wildcard pattern "[^...]" to be undefined.
Internationalisation et classes de caractères
Bien entendu, les intervalles ont été créés à l'origine en tant qu'intervalle ASCII où « [ -%] » signifie
« [ !"#$%] » et « [a-z] » correspond à « toute lettre minuscule ». Certaines implémentations UNIX ont
généralisé ceci de manière à ce que l'intervalle X-Y corresponde à l'ensemble des caractères dont les
codes se trouvent entre ceux de X et de Y. Néanmoins, ceci signifie que l'utilisateur doit connaître le
codage utilisé sur le système local. De plus, ceci ne fonctionne pas si l'ordre de l'alphabet local n'est
pas celui adopté pour le codage des caractères. POSIX a alors étendu grandement la notation des
expressions entre crochets autant pour les motifs génériques que pour les expressions rationnelles. Nous
avons vu précédemment 3 types d'éléments pouvant se trouver entre crochets. Plus précisément (i) une
négation, (ii) des caractères explicites, et (iii) des intervalles. POSIX spécifie les intervalles d'une
manière plus utile au niveau international, et ajoute trois nouveaux types :
(iii) Les intervalles X-Y comprenant tous les caractères se trouvant entre X et Y (inclus) dans l'ordre
de l'alphabet décrit par la catégorie LC_COLLATE de la localisation en cours.
(iv) Des classes de caractères comme
[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]
Ainsi, on peut écrire « [[:lower:]] » à la place de « [a-z] », et que le comportement soit aussi valide
au Danemark, où il existe 3 lettres postérieures au « z ». Ces classes de caractères sont définies par la
catégorie LC_CTYPE de la localisation en cours.
(v) Les symboles groupant plusieurs lettres comme « [.ch.] » ou « [.a-acute.] », dans lesquels les
chaînes entre « [. » et « .] » sont un élément de classement (collating element) défini dans la
localisation en cours. Il peut également s'agir de multicaractères.
(vi) Equivalence class expressions, like "[=a=]", where the string between "[=" and "=]" is any collating
element from its equivalence class, as defined for the current locale. For example, "[[=a=]]" might be
equivalent to "[aáaäâ]", that is, to "[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]".
VOIR AUSSI
sh(1), fnmatch(3), glob(3), locale(7), regex(7)
COLOPHON
Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à
l'adresse https://www.kernel.org/doc/man-pages/.
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess
<https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud
<tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard
<fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau
<jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François
<nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard
<simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot
<david@tilapin.org> et Frédéric Hantrais <fhantrais@gmail.com>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License
version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à
debian-l10n-french@lists.debian.org.
Linux 13 août 2020 GLOB(7)