Renommer en masse avec bash

bash

Voici une astuce pour renommer en masse des fichiers avec bash directement. Le but est d'obtenir, au lieu de artiste - album - numero - titre.mp3 quelque chose de plus simple comme numero - titre.mp3.

Pour cela, nous allons utiliser une boucle for ainsi qu'une notation un peu spéciale de variable bash.

for FILENAME in * ; do mv "$FILENAME" "${FILENAME#artiste\\ -\\ album\\ -\\ }"; done

La notation ${VARIABLE#asupprimer} permet d'interpréter la variable en supprimant du contenu (ici : artiste - album - ).

On renomme donc, pour chaque valeur de * (comme si je faisais un ls dans mon dossier courant), le fichier $FILENAME vers le fichier $FILENAME dont on a enlevé artiste - album - .

En utilisant un double dièze ##, on matche sur le plus long au lieu de faire sur le plus court quand on utilise un wildcard telle que l'étoile *.

Par exemple : admettons que $FILENAME soit égal à Pornophonique - 8-Bit Lagerfeuer - 01 - Sad Robot.ogg.

${FILENAME#P*\\ -\\ } sera équivalent à 8-Bit Lagerfeuer - 01 - Sad Robot.ogg

tandis que

${FILENAME##P*\\ -\\ } sera équivalent à Sad Robot.ogg

Des questions ?

Source : http://linuxgazette.net/issue57/eyler.html
Ah et pis : http://www.jamendo.com/en/search/all/pornophonique

Vus : 1802
Publié par Loutre.ch : 36