Isso pode ser feito com um comando rename
um pouco mais complexo:
rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) . ".png"/e' *.png
Notas:
- Você precisa separar a correspondência e a substituição por um
/
. - Você precisa agrupar a parte que deseja lembrar usando
$1
com()
(nesse caso,(\d{2,3})
). - Você deve corresponder aos números de 2 e 3 dígitos ou
100.png
se tornará1-1.png
. - Para usar uma aritmética ou funções na substituição, ela deve ser avaliada como uma expressão, é por isso que há um
e
após o fechamento/
. - Para combinar strings em uma expressão avaliada, você precisa usar
.
(daí. ".png"
). - Para preencher strings com zeros (presumivelmente o que você deseja, já que seus arquivos originais as tinham), use
sprintf
.%02d
será preenchido com zeros se o seu número não tiver pelo menos dois dígitos.
Exemplo:
$ rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) . ".png"/e' *.png | head
02.png -> 01.png
03.png -> 02.png
04.png -> 03.png
05.png -> 04.png
06.png -> 05.png
07.png -> 06.png
08.png -> 07.png
09.png -> 08.png
100.png -> 99.png
101.png -> 100.png
Dependendo da versão de rename
, talvez seja difícil renomear arquivos se o destino já existir. Nesses casos, uma solução simples é criar um diretório temporário e renomear / mover os arquivos para lá:
mkdir temp
rename -n 's/(\d{2,3}).png/sprintf("temp\/%02d", $1-1) . ".png"/e' *.png
Observe que /
após temp
precisa ser escapado ou será considerado como o comando final /
de s//
.