Cambiar el nombre de los archivos en Linux usando el patrón de expresiones regulares

Cambiar el nombre de los archivos en Linux usando el patrón de expresiones regulares

Quiero cambiar el nombre de muchos archivos como

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

Para hacerlo, utilicé este comando. Pero de alguna manera no funciona.

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

Respuesta1

Estuviste cerca, pero no del todo:

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

El problema es que []es una construcción de expresiones regulares especial y, por lo tanto, es necesario escapar de los corchetes para que coincidan con los corchetes reales. Ese es el propósito de las barras invertidas en mi versión.

Los corchetes sin escape forman lo que se llama una clase de carácter. Básicamente, una clase de personaje puede coincidir con cualquiera de los caracteres dentro de los corchetes. Entonces [.*]coincide con un punto o un asterisco. Cuando agrega un símbolo de intercalación ( ^) al comienzo de una clase, coincide con cualquier carácternodentro de los paréntesis.

En mi expresión regular, hacemos coincidir un corchete de apertura \[más uno o más caracteres que no son corchetes de cierre [^\]]+más un corchete de cierre \]y eliminamos todo eso.

información relacionada