tronquer les noms de files

J'ai un dossier qui a un certain nombre de files tous d'un formulaire similaire comme:

Dropkick Murphys - 01 - Walk Away.mp3 Dropkick Murphys - 02 - Workers Song.mp3 

Et ainsi de suite…

Je veux les convertir tous afin qu'ils apparaissent comme:

 01 - Walk Away.mp3 02 - Workers Song.mp3 

Comment puis-je faire ceci?

Sous Ubuntu ou Debian, c'est simplement:

 rename 's/Dropkick Murphys - //' *mp3 

Choisissez-en un.

 for i in *.mp3; do mv "$i" "${i#* - }"; done for i in *.mp3; do mv "$i" "${i:19}"; done 

Vous pouvez utiliser une boucle for pour boucler les files que vous voulez modifier. ${var/from/to} replacea la première occurrence de with to dans $var , donc ${var/Dropkick Murphys - /} replacea "Dropkick Murphys -" par rien:

 for i in "Dropkick Murphys - "*; do mv "$i" "${i/Dropkick Murphys - /}" done 

Réponse zsh obligatoire:

 autoload zmv zmv 'Dropkick Murphys - (*.mp3)' '$1' 

Variantes, pour renommer tous les noms d'artistes. Notez que la première command prend la plus longue correspondance de la première * , par exemple elle va renommer Dropkick Murphys - 01 - Walk Away - concert.mp3 à Walk Away - concert.mp3 .

 zmv '* - (* - *.mp3)' '$1' zmv '*.mp3' '${f#* - }' 

for i in *.mp3; do mv "$i" "$(echo $i | sed 's/^Dropkick Murphys - //')"; done

ou, plus généralement, supprimer les 3 premiers mots délimités par des espaces à partir d'un nom de file

echo $i | cut -d' ' -f4-

Il y a une command rename.ul (je suppose par défaut dans Ubuntu). Il vous donne un moyen simple de renommer les files

Syntaxe:

 $ rename from to file...