Man page - glob(7)

Packages contains this manual

Available languages:

en fr pt_BR es it pl ja ro zh_TW zh_CN

Manual

glob

NOM
DESCRIPTION
Motifs génériques
Chemins d’accùs
Listes vides
NOTES
Expressions rationnelles
Internationalisation et classes de caractĂšres
VOIR AUSSI
TRADUCTION

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

Le dĂ©veloppement est appliquĂ© Ă  chaque composant du chemin d’accĂšs sĂ©parĂ©ment. Un « / » dans un chemin ne peut pas ĂȘtre mis en correspondance avec un « ? » ou « * », ni par un intervalle tel que « [.-0] ». Un intervalle ne peut pas contenir explicitement un caractĂšre « / ». Cela dĂ©clencherait une erreur de syntaxe. (POSIX rĂ©clame qu’un motif soit laissĂ© inchangĂ© s’il est syntaxiquement incorrect.)

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 fichier-non-existant `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.

Maintenant que les expressions rationnelles disposent de composants entre crochets oĂč la nĂ©gation est indiquĂ©e par un « ^ », POSIX a prĂ©cisĂ© que le motif gĂ©nĂ©rique « [^...] » a un effet indĂ©fini.

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 valable 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 des paramĂštres rĂ©gionaux actuels.

(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) Des classes d’équivalence comme « [=a=] », oĂč la chaĂźne entre « [= » et « =] » est un Ă©lĂ©ment de classement dĂ©finissant une classe d’équivalence dans la localisation en cours. Par exemple, « [[=a=]] » peut ĂȘtre Ă©quivalent Ă  « [aåàÀù] », c’est-Ă -dire « [a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]] ».

VOIR AUSSI

sh (1), fnmatch (3), glob (3), locale (7), regex (7)

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>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

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 .