Supposons que j'ai cinq fichiers mp3:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
05-trackxyz.mp3
Maintenant, j'écoute rapidement les fichiers (juste mplayer sur la console fera l'affaire) et je découvre que les pistes sont dans le mauvais ordre . 05 est en fait 02 et le reste devra être renommé. Donc, je vais d'abord faire un changement de nom temporaire:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
00-trackxyz.mp3
Maintenant nous avons besoin d'un "shift": 02 devrait devenir 03, 03 devrait devenir 04 et 04 devrait devenir 05. Pour minimiser la confusion, ex-05 (maintenant 00) sera mv
édité plus tard.
Mon approche était la suivante: (perl rename
, par Larry Wall, par défaut ici sur Debian)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/' *
ainsi que (plus tard, après quelques RTFM supplémentaires)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/e' *
Aucun d'entre eux n'a fonctionné, en particulier parce que le /e[val]
modificateur n'accepte rien d'autre que des évaluations et générera une erreur une fois que vous tenterez de combiner les évaluations avec des chaînes. Le bash
peut le faire très bien, par exemple foo$((1+6))
sera évalué foo7
.
Alors, comment puis-je faire cela (une ligne de préférence, sans avoir l'intention d'écrire un script autonome juste pour cela)?