Você pode usar uma expressão real com renomeação. Nesse caso, combinamos quantos asteriscos houver e substituímos com a duração da correspondência:
rename 's/^[*]+/sprintf("%d_", length $&)/e' -vn *
Se isso parece certo, remova o argumento -n
. Isso é apenas para permitir que você teste com segurança.
Aqui está meu equipamento de teste:
$ touch \*{,\*{,\*}}abc.tab
$ rename 's/^[*]+/sprintf("%d_", length $&)/e' -vn *
***abc.tab renamed as 3_abc.tab
**abc.tab renamed as 2_abc.tab
*abc.tab renamed as 1_abc.tab
Se você também quiser fazer outra renomeação, poderá encadear:
$ rename 's/^[*]+/sprintf("%d_", length $&)/e; s/abc/xyz/' -vn *
***abc.tab renamed as 3_xyz.tab
**abc.tab renamed as 2_xyz.tab
*abc.tab renamed as 1_xyz.tab