Esse é o Perl rename
, suponho. Talvez algo assim funcionasse:
rename 's/^(\d+) ([^-])/$1 - $2/' [0-9]*.mp3
Combine qualquer coisa que comece com números, depois um espaço e depois algo diferente de um traço. Substitua pelos números, um traço e o próximo caractere. (O restante do nome não é tocado.) Verificando explicitamente o traço aqui para que os aplicativos repetidos não acabem com arquivos como 01 - - Track name.mp3
.
Na verdade, seu segundo exemplo parece funcionar, embora, é claro, para nomes em que o primeiro dígito é um zero. Poderíamos mudar isso para qualquer dígito e substituir minha segunda expressão capturada por uma antecipação negativa para continuar a adicionar mais de um traço.
rename 's/^\d+ (?!-)/$&- /' *.mp3
( (?!pattern)
corresponderá a uma posição que não é seguida pela pattern
, mas a correspondência é de largura zero, por isso não causa substituição.)