C'est en baillant que la loutre le dit:

Loutre avec écouteurs

Renommer en masse avec bash

jeu, 21/07/2011 - 00:42 -- d43m
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

Commentaires

Salut,
Pourquoi ne pas utiliser rename avec une expression rationnelle appropriée. J'ai essayé avec la commande suivante :
rename 's/.* (\d{1,2} .*)/$1/' Pornophonique\ -\ 8-Bit\ Lagerfeuer\ -\ 01\ -\ Sad\ Robot.ogg
Ça fonctionne parfaitement. Pas de boucle inutile dans ce cas.

bonjour,

employer detox pour faciliter l'indexation des morceaux et éviter les bourdes dans les scripts ....

cf man detox

Pour renommer des fichiers en masse, un outil graphique tel "pyrenamer" est très puissant et permet toutes sortes de substitutions, extraction de données exif, etc.

En ce qui concerne la musique, ExFalso (le taggeur intégré à quodlibet (un must en matière de gestion de bibliothèque musicale), est excellent : renomme les fichiers en fonction des tags (ou l'inverse), retague en masse etc.

Sinon Alexis a raison : l'utilitaire rename avec expressions rationnelles est - IMHO - préférable.

Ce n'est pas du Bash, mais du Shell. Cela fonctionne par exemple avec Zsh ou Dash.

Et je ne crois pas que les \\ soient utiles.

Merci pour les astuces, je ne connaissais pas rename ni detox (d'ailleurs detox m'a l'air super intéressant, il faudrait que je l'installe). Mais l'article était surtout un mémo pour montrer l'utilisation de la notation ${VARIABLE#asupprimer.

@Elassar : Au temps pour moi. Pour les \ \ , question d'habitude Mais c'est effectivement possible sans, et même moins compliqué.