Bash: Renomeie o arquivo com o prefixo como sufixo

2

Estou tentando fazer algo bastante simples e não estou familiarizado com a forma de realizar isso.

Eu tenho um conjunto de arquivos que foram nomeados: x2_filename.png e gostaria de transformar o arquivo neste formato: [email protected]

Obrigado!

    
por Erik 27.07.2015 / 23:58

2 respostas

4

Você pode usar o utilitário rename com as expressões regulares apropriadas.

Supondo que a transformação seja:

nondigits digits underscore nondots dot anything
into
nondots atsign digits nondigits dot anything

o comando seria:

$ prename -n 's/([^\d]*)(\d*)_([^.]*)\.(.*)$/$3\@$2$1.$4/' *

O último * expande-o para aplicar a todos os arquivos correspondidos por esse glob e a opção -n faz com que ele apenas simule a operação de renomeação para que você possa verificar se faz o que deseja.

    
por 28.07.2015 / 00:11
2

Se você tiver o comando prename ( perl script), vem com perl package no Debian você pode fazer:

prename -n 's/(\D+)(\d+)_([^.]+)/$3\@$2$1/' *.png

Exemplo:

$ ls -1
x1_filename.png
x2_filename.png
x3_filename.png
x4_filename.png

$ prename -n 's/(\D+)(\d+)_([^.]+)/$3\@$2$1/' *.png
x1_filename.png renamed as [email protected]
x2_filename.png renamed as [email protected]
x3_filename.png renamed as [email protected]
x4_filename.png renamed as [email protected]

prename -n é para --dry-run , se você estiver satisfeito com as alterações que serão realizadas diretamente:

prename 's/(\D+)(\d+)_([^.]+)/$3\@$2$1/' *.png
    
por 28.07.2015 / 00:10

Tags