Provided by: manpages-fr_4.15.0-9_all bug

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 « / ». Ceci 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 « [ha...] » 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  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) 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á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)

COLOPHON

       Cette page fait partie de la publication 5.13 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>,  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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.