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