Du renommage de fichier

Je devais renommer des fichiers pour retirer un mot à l’avant et transformer l’extension du fichier. Il me fallait passer de 2009_nomdevoyage_numerophoto.jpg à nomdevoyage_numerophoto_w.jpg
Sur des forums, on trouve des choses à base de sed, assez incompréhensible comme

i=2009_nomdevoyage_numerophoto.jpg ; echo $i|sed 's/[^_]*_//;s/.jpg/_w.jpg/'

Une solution sympa pour faire ce travail serait d’utiliser uniquement le shell. Voici une possibilité, avec zsh, puis avec bash.

<endymion@sol-draconi(0):/tmp>zsh/3 1273 % i=2009_nomdevoyage_numerophoto.jpg ; echo ${${i#2009_}%jpg}_w.jpgnomdevoyage_numerophoto._w.jpg[dim. 09/06/07 23:28 CEST][pts/5][i686/linux-gnu/2.6.29.4][4.3.10]<endymion@sol-draconi(0):/tmp>zsh/3 1274 % bashbash-4.0$ i=2009_nomdevoyage_numerophoto.jpg ; echo ${${i#2009_}%jpg}_w.jpgbash: ${${i#2009_}%jpg}_w.jpg : mauvaise substitutionbash-4.0$ i=2009_nomdevoyage_numerophoto.jpg ; j=${i%.jpg}_w.jpg ; echo ${j#2009_}nomdevoyage_numerophoto_w.jpgbash-4.0$

Je vous laisse deviner quelle solution a ma préférence