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.