glob

GLOB(7)                    Manuel du programmeur Linux                   GLOB(7)



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.08 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)