Bash et incrémentation

Une astuce donnée lors de ma formation RH442
On est parfois amené à gérer des fichier issus de rotations de logs
(logrotate). On se voit donc gérer des fichiers de la forme: xxx.log.1,
xxx.log.2, etc.
Lorsque je scriptais ou que j'avais à gérer ces fichiers j'utilisais la
commande seq en bash
#for i in $(seq 1 5); do echo $i ; done
Avec la version 3 de bash on peut maintenant simplifier cette commande en:
#for i in {1..5}; do echo $i ; done
Je la trouve plus simple à mémoriser.
exemple d'application directe: for i in {1..5}; do gzip access_log.$i; done
-> On compressera tous les fichiers logs de 1 à 5
--
Y.Pournin
Site: http://www.pournin.com

1 commentaire:

Laurent GAUTROT a dit…

L'avantage de la syntaxe {1..10} est qu'il s'agit d'un builtin de bash et qu'il n'y a pas de fork et donc de création d'un process pour générer la séquence.

L'inconvénient est qu'il y a beaucoup moins de souplesse que dans l'utilisation de seq, qui permet entre autres de spécifier un incrément.

Pour aller plus loin dans les génération de séquences, voir aussi zsh, un super shell, très perlish, d'ailleurs. zsh permet en particulier d'exprimer des choses comme :

% echo test{000..004}
test000 test001 test002 test003 test004