Aqui está o comando renomear:
rename -n 'our $i=2;s/^(\d+)-(\d+)/sprintf("$1-%04d", $i*$2)/e' *.png
Resultado:
1-001.png renamed as 1-0002.png
1-002.png renamed as 1-0004.png
1-003.png renamed as 1-0006.png
1-004.png renamed as 1-0008.png
1-005.png renamed as 1-0010.png
...
2-001.png renamed as 2-0002.png
2-002.png renamed as 2-0004.png
2-003.png renamed as 2-0006.png
2-004.png renamed as 2-0008.png
2-005.png renamed as 2-0010.png
-n, --no-act
No Action: show what files would have been renamed.
Com our $i , eu defini uma variável global perl e defini seu valor com 2 .
(\d+)-(\d+) : (\d+) está correspondendo ao início do nome dos arquivos com um ou mais números de dígitos e os torna como captura de grupo e um - ; em seguida, novamente com (\d+) correspondendo a qualquer número após traço ( - ) no nome dos arquivos e torná-lo como captura de grupo.
^ no início de ^(\d+)-(\d+) evita / ignora renomear arquivos se eles não forem iniciados ( ^ ) com números como a11.001.png e renomear arquivos apenas se começarem com digit-digit.png . / p>
sprintf("$1-%04d", $i*$2) : Primeira captura de grupo de impressão com índice $1 (ou sua referência anterior) (consulte primeiro (\d+) em ^(\d+)-(\d+) ) e imprima novo valor calculado do grupo $2 com no máximo 4 campos de largura ( %4d ) e preencher campos vazios com 0s ( %04d ).
Observação: por que usei o comando %04d in sprintf , porque quando você deseja renomear 1-001.png para 1-002.png , o arquivo 1-002.png já existe e não é possível renomeá-lo. Então, adicionei um zero extra à frente do segundo campo para evitar esse erro.
Ou como @muru sugere, você pode usar referências anteriores em vez da variável global
rename -n 's/^(\d+)-(\d+)/sprintf("$1-%04d",$2*2)/e' *.png
$1 é a referência de volta do primeiro (\d+) e $2 é a referência de retorno do segundo (\d+) . Observe que você precisa usar um par de parênteses (group) para torná-lo uma captura de grupo.
No final, você pode remover a opção -n do comando para renomear seus arquivos.