Renomear usando terminal e regexp para remover números iniciais de nomes de arquivos

2

Eu quero que os seguintes arquivos sejam renomeados para remover os números de sequência.

01 X.mp3 a X.mp3

02 Add Me In.mp3 a Add Me In.mp3

Estou tentando com o comando abaixo renomear.

rename -v -n 's/^\d+\s*([a-z]+\.mp3)$/$1\.mp3/' *.mp3

A execução deste comando me dá este erro:

Using expression: sub { use feature ':5.18'; s/^\d+\s*([a-z]+\.mp3)$/$1\.mp3/ }
    
por Snehashish 24.07.2016 / 14:47

2 respostas

7

Não vejo por que esse erro ocorreria. Na verdade, estou razoavelmente certo de que havia mais linhas para o erro do que você mostra; por um lado, não há nenhuma mensagem de erro real.

No entanto, essa expressão regular não corresponderá realmente a nenhum dos seus arquivos de exemplo. Você está usando [a-z]+\.mp3 , que corresponderá apenas a letras minúsculas e, como você está correspondendo até a extensão, só corresponderá aos arquivos cujo nome consiste em somente letras minúsculas após os números e espaço que você deseja remover. Você poderia, em vez disso, corresponder a [a-zA-Z] ou usar s///i para tornar a correspondência insensível, mas seria melhor não corresponder ao resto da palavra. Você só quer remover os dígitos e os espaços em branco desde o início, portanto, basta combinar com eles:

rename -vn 's/^\d+\s+//' *mp3
    
por 24.07.2016 / 14:59
3

Solução usando Expansão do parâmetro

for i in *.mp3 ; do mv "$i" "${i#${i%%[!0-9 ]*}}" ; done
  • ${i%%[!0-9 ]*} exclui do primeiro caractere não-dígito / não-espacial até o final.
  • Os caracteres restantes são passados para ${i# , que, em seguida, os exclui do início da variável i , resultando no nome do arquivo desejado sem iniciar dígitos e espaço
por 24.07.2016 / 15:09