Le modèle de globalisation de nom de fichier standard pour correspondre à un chiffre est [0-9]
. Cela correspond à un seul chiffre:
cat file[0-9].txt
Pour n'en sélectionner que deux:
cat file[25].txt
Pour des nombres supérieurs à 9, l'expansion de l'accolade sera utile (mais voir la note ci-dessous pour la différence entre les modèles de globulation et les extensions de l'accolade):
cat file{25..60}.txt
Encore une fois, l'expansion des accolades permet également les numéros individuels:
cat file{12,45,900,xyz}.txt
(notez que dans l'exemple ci-dessus, l'expansion d'accolade n'implique pas de boucle arithmétique, mais génère simplement des noms en fonction des chaînes fournies).
Dans bash
, avec l' extglob
option shell activée ( shopt -s extglob
), les éléments suivants fonctionneront également:
cat file@(12|45|490|foo).txt
Le @(...)
modèle correspondra à n'importe |
lequel des modèles délimités inclus .
La différence entre les modèles globbing as [...]
et @(...)
et les extensions d'accolade est qu'une expansion d'accolade est générée sur la ligne de commande et peut ne pas correspondre à des noms existants dans le répertoire en cours. Un modèle de globbing de nom de fichier correspondra aux noms, mais le shell ne se plaindra pas si tous les noms possibles n'existent pas. Si aucun nom correspondant n'existe, le modèle restera non développé, sauf si l' nullglob
option shell est également définie, auquel cas le modèle est supprimé.
Exemple:
touch file1
ls file[0-9]
Ici, seule la liste des fichiers pour file1
sera affichée.
Avec ls file{0..9}
, ls
se plaindrait de ne pas trouver file0
, file2
etc.
Dans l'exemple suivant, la première commande ne touchera que les noms existants qui correspondent au modèle donné, tandis que la deuxième ligne créera des fichiers qui n'existent pas déjà:
touch file[0-9]
touch file{0..9}
file45.txt
. L'expression entre crochets[...]
fonctionne exactement comme dans l'expression régulière mais utilise!
à la place de^
pour dire "pas dans". Un[...]
motif correspondra toujours à un seul caractère.{1,2}
n'est pas non plus conforme à POSIX ... a appris quelques nouvelles choses aujourd'hui!grep
, générer des URL vers lesquelles passercurl
, etc., mais cela peut aussi être source de confusion. aux personnes habituées à travailler avec des globes.La syntaxe à utiliser est celle
file{1,2}
qui évaluera versfile1
etfile2
.Comme Inian l'a également souligné ci-dessous ... il serait plus facile de le faire
touch file{1..9}
dans cet exemple ...Vous pouvez également utiliser plusieurs expressions, comme:
Oui, ce qui précède créera 234 (
9
fois26
) fichiers.la source
file{1,2}
syntaxe est également pratique pour renommer des fichiers:mv some_very_long_filename.txt{,.bak}
Oui, vous pouvez utiliser l'expansion d'accolade dans le
bash
shell. Pour juste quelques fichiers, faitesfile{1..2}
oufile{1,2}
Ou si vous craignez que les fichiers ne soient pas là dans certains cas, faites simplement une boucle,
Ou si la simple concaténation est votre seule opération sur les fichiers et si vous ne savez pas quels fichiers ne pourraient pas être présents à un moment donné, il suffit de
cat
les supprimer et de supprimer les erreurs. La redirection de l'erreur standard vers/dev/null
supprimerait les erreurs si le fichier n'était pas disponible.ou utilisez l'expression glob
file[15]
qui ne se plaint pas des erreurs si le fichier n'a pas été trouvé.la source
file{1,5}
syntaxe virgule était tout ce qui me manquait!