Quero renomear muitos arquivos como
Tum Hi Ho [www.DJMaza.Com].mp3
paraTum 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.