[2-57]
est un jeu de caractères consistant 2
, 3
, 4
, 5
et 7
, dans zsh et tous les autres caractères génériques et la syntaxe regexp là - bas. Votre modèle de glob *[2-57]
correspond à chaque nom de fichier dont le dernier caractère est l'un de ces cinq chiffres.
Je pense que vous vous souvenez mal de la syntaxe du [m,n]
qualificatif glob . Les qualificatifs globaux sont toujours placés entre parenthèses à la fin du modèle et le séparateur de plage est une virgule. Le motif *([2,57])
s'étend aux 2e, 3e,… et 57e matchs. L'ordre d'extension par défaut est lexicographique (avec une magie spéciale pour trier les nombres dans l'ordre numérique si l' numeric_glob_sort
option est définie); vous pouvez le contrôler avec le qualificatif o
or O
glob (par exemple *(om[2,57])
pour faire correspondre le 57 fichier le plus récent à l'exception du fichier le plus récent).
for x in /foo/bar/*([2,57]); do print $x; done
Pas ce que vous avez demandé, mais lié et peut-être utile aux futurs lecteurs: si vous voulez énumérer les fichiers 2 à 57, qu'ils existent ou non, vous pouvez utiliser une expression d'accolade de plage . Cette fonctionnalité existe également dans bash et ksh.
echo hello{2..57}
Et si vous souhaitez faire correspondre des fichiers dont le nom contient un nombre compris entre 2 et 57, vous pouvez utiliser le modèle <2-57>
. Ceci est spécifique à zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Notez qu'un modèle comme *<2-57>
ne fera probablement pas ce que vous attendez, car il *
pourrait également correspondre à des chiffres. Par exemple, file58
correspond *<2-57>
, avec file5
correspondance de la *
pièce et 8
correspondance de la <2-57>
pièce. Le motif *[^0-9]<2-57>
évite ce problème.