Script de shell Bash para eliminar un guid dentro de un nombre de archivo

Script de shell Bash para eliminar un guid dentro de un nombre de archivo

Estoy intentando reemplazar un guid sin guiones de algunos nombres de archivos.

Creo que ya tengo la expresión regular lista, sin embargo, parece que no puedo lograr que los comandos de escape correctos o de reemplazo funcionen entre sí.

Aquí está mi expresión regular

https://regex101.com/r/SiqsjP/1

(-[0-9a-f]{32})

Con nombres de archivos como este

iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png

He visto esta respuestaScript de shell Bash para localizar y eliminar subcadenas dentro de un nombre de archivopero no es exactamente lo mismo...

Creo que esto debería funcionar, pero ¿no se queja de un error?

newname=`echo "$filename" | sed -e 's/\([0-9a-f]{32}\)\.png/\1.png/'`

Respuesta1

Ensed BRE(expresiones regulares básicas) también debes escapar de las llaves {}:

newname=`echo "$filename" | sed 's/-[0-9a-f]\{32\}//g'`

Para mover/cambiar el nombre del archivo:

mv "$filename" "$newname"

Respuesta2

Usando manipulaciones de cadenas en el shell:

for name in *.png; do
    # remove everything after the last '-' including the dash
    # and add the '.png' extension back
    newname="${name%-*}.png"
    echo mv "$name" "$newname"
done

Esto supone que todos los archivos a los que le gustaría cambiar el nombre son .pngarchivos en el directorio actual.

Ejecute esto una vez y elimine echosi parece que está haciendo lo correcto.

información relacionada