Eu provavelmente acabaria usando o diretório temporário nesse caso:
for file in [[:digit:]]*.png; do
echo mv $file tmp/$(printf %04d $((10#${file%.png}+1))).png
done
A parte importante é 10#N
, que força o bash a interpretar 000N
como apenas N
, caso contrário, os zeros iniciais indicam números octais.
Por exemplo:
$ touch 0001.png 0002.png 0010.png 0020.png 0100.png 0200.png
$ for file in [[:digit:]]*.png; do echo mv $file tmp/$(printf %04d $((10#${file%.png}-1))).png; done
mv 0001.png tmp/0000.png
mv 0002.png tmp/0001.png
mv 0010.png tmp/0009.png
mv 0020.png tmp/0019.png
mv 0100.png tmp/0099.png
mv 0200.png tmp/0199.png