Renomeie arquivos no Linux usando o padrão regex

Renomeie arquivos no Linux usando o padrão regex

Quero renomear muitos arquivos como

Tum Hi Ho [www.DJMaza.Com].mp3paraTum Hi Ho.mp3

Para fazer isso, usei este comando. Mas de alguma forma não está funcionando.

`rename -n 's/(.*)([.*])(\.mp3)/$1$3/' *.mp3`

Responder1

Você estava perto, mas não exatamente:

rename -n 's/\[[^\]]+\]//' *.mp3

O problema é que []é uma construção regex especial e, portanto, os colchetes precisam ser escapados para que correspondam aos colchetes reais. Esse é o propósito das barras invertidas na minha versão.

Os colchetes sem escape formam o que é chamado de classe de caracteres. Uma classe de caracteres pode basicamente corresponder a qualquer um dos caracteres entre colchetes. Portanto, [.*]corresponde a um ponto final ou a um asterisco. Quando você adiciona um sinal de intercalação ( ^) ao início de uma classe, ele corresponde a qualquer caracterenãodentro dos colchetes.

Na minha regex, estamos combinando um colchete de abertura \[mais um ou mais caracteres que não são colchetes de fechamento [^\]]+mais um colchete de fechamento \]e removendo tudo isso.

informação relacionada