Loading

NOM

       glob - Développement des noms de fichiers

       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 « ? » (sans les guillemets) correspond à n’importe quel caractère.

       Un « * » (sans les guillemets) 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 un backslash « \ »,  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 daccè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 « / ». Ceci déclencherait une erreur de syntaxe.

       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  positionnant  la  variable
       d’environnement allow_null_glob_expansion=true.

       (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 régulières
       Notez  que les motifs génériques ne sont pas des expressions régulières
       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  régulière,  « * »
       signifie zéro ou plusieurs copies de l’élément précédent.

       Maintenant que les expressions régulières 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  à  « tout  caractère 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  régulières.  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 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  définissant  une  classe  d’équivalence
       dans  la  localisation  en  cours  par  exemple  « [[=a=]] »  peut être
       équivalent    à     « [a] »     (Latin-1),     c’est     à     dire
       «[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 3.23 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

       Veuillez   signaler   toute   erreur   de   traduction  en  écrivant  à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».