O seguinte parece funcionar:
find DirPath -type f -name "*.*"|\
for (( n=1;; ++n ));\
do l="'line'"||break; mv "$l" "${l%/*}/$n.${l##*.}"; done
A cláusula -name é porque a divisão do nome do arquivo falha se não houver nenhum ponto, embora você possa preferir -iname "*.jpg" . A cláusula do poderia ser elaborada para manipular nomes de arquivos sem extensão.
Observe que line retorna um erro no final do arquivo, então ||break finaliza o loop.
Recomendo que você adicione echo antes de mv para garantir que o comando funcione como esperado: você pode salvar essa saída como uma referência às alterações feitas.
Se você precisar classificar os diretórios e arquivos antes de atribuir os números, o que parece ser uma coisa sensata, adicione um filtro de classificação, especificando / como um separador de campo:
find DirPath -type f -name "*.*"|sort -t /|\
for (( n=1;; ++n ));\
do l="'line'"||break; mv "$l" "${l%/*}/$n.${l##*.}"; done