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

Tagcloud
Ubuntu automontage kernel authentification orgcamp NetworkManager Internet identification PSL Science-Fiction JDLL postfix Opinions Gentoo Éducation Iptables OSM rubber sympa GNU-Linux Educ Libre PlanetUbuntuFr PlanetUbuntu nfs UbuntuFr Mathématiques auto hébergement Python compilation dovecot Mozilla Mandriva Emacs Perso eCryptfs April Drupal beamer automatisation shell DNS Voile Mutt orgmode Société LDAP Réflexions SNCF configuration Épinay redmine sqlite php CAPES Spam OpenVPN CPL dotclear ISN vélo mail installation OpenSSL GCC X.org sudo ArchLinux fail vserver IPv6 Debian Coups de gueule LaTeX Admin Sys Free Parinux RaspberryPi Vie numérique Essai sieve gpg vim fun Randonnée SPF OpenStack Informatique Coup de gueule Lectures Paris Web imap RATP Technique CLI code KDE roundcube Munin