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
$1com()(nesse caso,(\d{2,3})). - Você deve corresponder aos números de 2 e 3 dígitos ou
100.pngse 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
eapó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.%02dserá 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// .