Nota : Contributeurs, les sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
Les shells de type bourne (comme Bash, Zsh, Ksh, Dash…) supportent une syntaxe très puissante : les globs encore appelés patterns
(glob: “global command”)2)
Les globs les plus basiques sont :
L'astérisque signifie “n'importe quelle chaîne de n'importe quels caractères”
echo *
affiche le nom de tous les fichiers du répertoire.
for f in *; do echo "$f"; done
Même chose, mais en faisant une boucle. Il sera affiché un fichier par ligne
mv /repertoire/*.pdf /autre/part
déplacer tout les fichiers pdf de “/repertoire” et les placer dans “/autre/part”
On notera que les fichiers dont le nom commencent par un point ne sont pas affectés par * .
A votre avis, comment peut on faire pour les afficher aussi ?
Un point d'interrogation signifie “un caractère quelconque et un seul”.
Imaginons que nous nous retrouvions avec les fichiers :
ls
Affiche :
toto titi tata test tintin milou
Nous voulons n'afficher que les fichiers dont les noms font quatre lettres de longueur :
ls ????
Affiche :
tata test titi toto
Nous aimerions maintenant afficher les fichiers toto titi et tata, mais ne pas toucher aux autres.
Nous pouvons aisément faire, par exemple :
ls t?t?
Affiche :
tata titi toto
Simple, non ?
Nous savons nous servir de *, de ?, très bien, mais il ne sont parfois pas assez complets pour exprimer des besoins précis. D'où l'introduction des expressions entre crochet (POSIX parle de bracket expression). Une expression entre crochets peut avoir plusieurs formes, la plus simple est la liste.
La liste [abcde]
peut correspondre à n'importe quel lettre entre crochets : a ou b ou c ou d ou e.
Donc, [hv]elo
peut correspondre à la chaîne de caractères helo
tout comme à velo
.
Poursuivons avec nos fichiers.
Nous aimerions quelque chose d'encore plus précis qu'avec t?t?
.
Pour n'afficher que toto
et titi
nous allons utiliser les crochets.
La liste des fichiers :
ls
Affiche :
tata titi toto test tintin milou
La commande avec les crochets :
ls t[oi]t[oi]
Affiche :
titi toto
Génial ! Mais, voyons ce qu'il se passe lorsqu'un fichier au nom inattendu montre le bout de son nez :
touch tito
Vous savez qui c'est Tito, n'est ce pas ?
ls
Affiche :
tata test titi tito toto tintin milou
ls t[oi]t[oi]
Affiche :
titi tito toto
C'est déjà intéressant, mais il y a mieux :
la possibilité d'utiliser des groupes
de lettres dans les expressions entre crochets :
ls t[a-z]t[a-z]
tata titi tito toto
Voilà, vous avez tout en main pour comprendre les globs basiques.
Pour plus d'informations, n'oubliez pas le manuel :
man nom-du-programme
exemple :
man mkdir
Affiche :
NAME mkdir - make directories SYNOPSIS mkdir [OPTION]... DIRECTORY... DESCRIPTION Create the DIRECTORY(ies), if they do not already exist.
Non recommandé :
apt-get install manpages-fr
Plus tard nous verrons quelques concepts de globs plus avancés.