Esse decremento pode ser feito de uma maneira bem baixa: gere a lista, comece no começo. Não é assim tão fácil “produzir” lidando com todos os casos, mas é pouco mais que um one-liner se você estiver disposto a codificar coisas como o número máximo de dígitos e assumir que não existem outros arquivos chamados dir.* . Usando a sintaxe bash, ajustada para menos digitação:
i=0
for x in dir.{?,??,???}; do
mv "$x" "${x%.*}.$i"
((++i))
done
Note que tem que ser dir.{?,??,???} e não dir.* para obter dir.9 antes de dir.10 .
Em zsh, você pode tornar isso um pouco mais robusto, sem custos, usando <-> para expandir para qualquer sequência de dígitos e (n) para classificar numericamente ( dir.9 antes de dir.10 ).
i=0
for x in dir.<->(n); do
mv $x ${x%.*}.$i
((++i))
done