Renomeando vários arquivos, mas mantendo a parte numérica

Renomeando vários arquivos, mas mantendo a parte numérica

Eu tenho vários arquivos como este:

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

então, você pode notar que os arquivos podem ter 3 partes:

  • um prefixo que pode ser qualquer string
  • um número que pode conter um sufixo como "a", "b", etc.
  • um final opcional, que é sempre uma string e começa com um espaço, como "(carro amarelo)", "círculo vermelho", etc.

O que eu preciso é isto: quero em uma operação:

  • mude o prefixo para o que eu quero
  • mantenha o número e o sufixo (a, b, c...) se houver
  • livre-se do final

usando o primeiro exemplo, posso querer transformar isso em

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

como faço isso? Como você vê, a única coisa que guardo é o número e o sufixo "a, b, c" quando existe um...

Para simplificar, o comando deve operar em todos os arquivos de um determinado diretório.

Desde já, obrigado.

Responder1

Uma maneira padrão de fazer esse tipo de coisa é usar sed para gerar o novo nome do arquivo:

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

Antes de fazer isso, você deve examinar os comandos para garantir que eles façam o que você deseja e fazer um backup.

informação relacionada