
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 .png
archivos en el directorio actual.
Ejecute esto una vez y elimine echo
si parece que está haciendo lo correcto.