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
PSL Mutt bash iSCSI Ubuntu Educ IPv6 authentification LED vélo Informatique vserver kernel identification Mathématiques orgcamp Bordage LaTeX OpenStack Iptables mail Réflexions beamer Libre PlanetUbuntuFr Voile Python postfix configuration Essai Vie numérique April CPL ArchLinux Internet Lectures auto hébergement installation PlanetUbuntu Dédibox shell automatisation Admin Sys dovecot JDLL LDAP Humour noir Web Mandriva Randonnée Fedora Coup de gueule GNU-Linux ssh Coups de gueule RaspberryPi Bretagne AdminSys Hadopi UbuntuFr Science-Fiction CAPES DNS loop ISN Drupal imap sudo sympa Spam Amis jeu nfs sieve fluxbox compilation fun Perso debug RATP dotclear cli OSM KDE Paris roundcube orgmode X.org Emacs Debian Épinay OpenSSL code fail eCryptfs Opinions Gentoo Technique Parinux Mozilla