Isso deve funcionar:
for i in *mp3; do rename 's/(.+?)_(.+?)_(.+?)-(.+?)-(.+?)_(.+?)-(.+?)-(.+?).mp3/$8-$7-$6_$3-$4-$5_$1_$2.mp3/' "$i"; done
Os parênteses capturam padrões. A 1ª correspondência capturada é $1
, o 2º $2
etc. Então, o comando acima:
- procurará tudo até o primeiro
_
-
.+?
significa corresponder ao padrão mais curto possível devido ao?
, - então tudo até o 2º
_
etc. - e renomeia de acordo.
Eu testei com:
$ touch [name]_[phonenumber]_HH-mm-ss_dd-MM-yyyy.mp3
$ ls
[name]_[phonenumber]_HH-mm-ss_dd-MM-yyyy.mp3
$ for i in *mp3; do rename 's/(.+?)_(.+?)_(.+?)-(.+?)-(.+?)_(.+?)-(.+?)-(.+?).mp3/$8-$7-$6_$3-$4-$5_$1_$2.mp3/' "$i"; done
$ ls
yyyy-MM-dd_HH-mm-ss_[name]_[phonenumber].mp3