3 votes

Dans Terminal, en utilisant la commande "touch" pour créer en masse des fichiers consécutifs avec des zéros initiaux, avec bash, produit des résultats différents que zsh

Dans Terminal, je préfère utiliser bash comme shell par défaut. En utilisant la commande touch File_{01..10}.txt, j'obtiens ces résultats :

File_1.txt, File_10.txt, File_2.txt, File_3.txt, File_4.txt, File_5.txt, File_6.txt, File_7.txt, File_8.txt, File_9.txt

Comme vous pouvez le constater, il n'y a pas de zéros en tête des noms de fichiers.

Cependant, en utilisant zsh, la même commande touch File_{01..10}.txt produit ces résultats :

File_01.txt, File_02.txt, File_03.txt, File_04.txt, File_05.txt, File_06.txt, File_07.txt, File_08.txt, File_09.txt, File_10.txt

Comme vous pouvez le voir, zsh produit les résultats désirés avec les zéros en tête.

Y a-t-il un moyen de configurer bash pour obtenir les mêmes résultats que zsh avec la commande touch ?

2voto

Michael Zhou Points 167

Sans installer un gestionnaire de packages et ensuite une version plus récente de votre shell, vous pourriez travailler avec les outils que vous avez. En utilisant la commande intégrée printf vous pourriez-

touch $(printf "file_%02d.txt " {1..10})

Vous pourriez également utiliser la commande externe jot-

touch $(jot -s " " -w 'file_%02d.txt' 10)

Maintenant, si vous vouliez utiliser l'expression de séquence de bash5 {DÉBUT..FIN[..INCREMENT]} alors -

jot -s " " -w 'file_%02d.txt' 4 2 10

où 4 équivaut au nombre de fois imprimé, 2 équivaut à l'incrément, et 10 équivaut à la valeur maximale.

Évidemment, après tout, vous pourriez utiliser zsh dans votre shell "par défaut" pour faire le travail-

zsh -c 'touch file_{01..10}.txt'

1voto

jaume Points 13186

La version de Bash incluse dans macOS est assez ancienne (3.2.57 dans Monterey 12.3.1) et ne respecte pas les zéros initiaux lors de l'expansion de {01..10}, mais les versions plus récentes de Bash le font (voir man bash) :

Une expression de séquence prend la forme {x..y[..incr]}, où x et y sont soit des entiers, soit des caractères uniques, et incr, un incrément optionnel, est un entier. Lorsque des entiers sont fournis, l'expression s'étend à chaque nombre entre x et y, inclus. Les entiers fournis peuvent être préfixés par 0 pour forcer chaque terme à avoir la même largeur. Lorsque x ou y commence par un zéro, le shell tente de rendre tous les termes générés à contenir le même nombre de chiffres, en ajoutant des zéros au besoin.

Je vous recommande d'installer Homebrew puis Bash (5.1.16 à la date de rédaction de ce document), et de configurer Terminal pour utiliser cette version à la place (corrigez le chemin ci-dessous en conséquence) :

entrer la description de l'image ici

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X