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.