Provided by: manpages-fr_4.27.0-1_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 « / ». 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.

Pages du manuel de Linux 6.9.1                    15 juin 2024                                           glob(7)