Cambiar el nombre de un montón de archivos pero manteniendo la parte numérica

Cambiar el nombre de un montón de archivos pero manteniendo la parte numérica

Tengo un montón de archivos como este:

pic100.png
pig102.png
box103a.png
superb103b.png
px103c.png
rotor110 - new.png
ready1323 (yellow car).png
motorhome1036x red circle.png
...

Entonces puedes notar que los archivos pueden tener 3 partes:

  • un prefijo que puede ser cualquier cadena
  • un número que puede contener un sufijo como "a", "b", etc.
  • una terminación opcional, que siempre es una cadena y comienza con un espacio, como "(automóvil amarillo)", "círculo rojo", etc.

Lo que necesito es esto: quiero en una sola operación:

  • cambiar el prefijo al que quiero
  • conservar el número y el sufijo (a, b, c...) si lo hay
  • deshazte del final

Usando el primer ejemplo, es posible que desee transformarlo en

object100.png
object102.png
object103a.png
object103b.png
object103c.png
object110.png
object1323.png
object1036x.png

¿Cómo puedo hacer eso? Como veis lo único que me quedo es el número y el sufijo "a,b,c" cuando lo hay...

Para simplificarlo, el comando debe operar en todos los archivos de un directorio determinado.

Gracias de antemano.

Respuesta1

Una forma estándar de hacer este tipo de cosas es usar sed para generar el nuevo nombre del archivo:

ls | while read file; do
     new=$( echo $file | sed 's/[^0-9]*\([^ ]*\)[^.]*\(\..*\)*/object\1\2/' )
     mv "$file" "$new"
done

Antes de hacer eso, debes examinar los comandos para asegurarte de que hacen lo que deseas y hacer una copia de seguridad.

información relacionada