Como a parte da descrição do nome do arquivo pode conter o padrão - (um hífen entre dois espaços), você pode alterá-lo para algum símbolo que não ocorra na parte da descrição. Eu escolhi £ , mas isso é puramente arbitrário.
rename 's/ - /£/' *
rename 's/([^,]*), ([^£]*)£/$2 $1 - /' *
s/ - /£/' tells rename to replace the first instance of - it finds with £ . The second command is a bit more complicated. Parenthases ( () ) are used to group selections together -- so everything that matches the pattern within the first set of parens can be called later as $ 1 (all the way up to $ 9 ). [^,] means 'any character, except for , '; means 'zero or more of the previous character'; [^,] 'significa' zero ou mais de qualquer caractere, exceto por uma vírgula '. Como a renomeação é gulosa por padrão, ela corresponde à string mais longa possível.
O resto, penso eu, segue muito naturalmente.
Se você não tiver certeza se um símbolo aparece em algum lugar no nome do arquivo, basta executar:
printf '%s\n' *£*
Se você tiver perl-rename:
rename 's/([^,]*), (.*) - /$2 $1 - /' *
Isso será interrompido se a parte da descrição dos nomes de arquivos contiver - (ou seja, um - entre dois espaços).
Você deve testar isso com o sinal -n , que não renomeia nenhum arquivo, mas mostrará o que teria :
rename -n 's/([^,]*), (.*) - /$2 $1 - /' *