Renomeando um monte de arquivos, mas mantendo a parte numérica

3

Eu tenho um monte de arquivos como este:

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

você pode perceber 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: eu quero em uma operação para:

  • altere o prefixo para o que eu quero
  • mantenha o número e o sufixo (a, b, c ...) se houver um
  • elimine o 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 estou mantendo é o número e o sufixo "a, b, c" quando há um ...

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

Obrigado antecipadamente.

    
por SpaceDog 07.04.2012 / 01:47

1 resposta

6

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

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

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

    
por 07.04.2012 / 02:18

Tags