No Debian, Ubuntu e derivados, você pode usar o rename
script Perl :
rename 's/(?<=-)([0-9]+)/sprintf "%03d", $1/e' prefix-*.ext
Alguns sistemas podem ter este comando instalado como prename
ou perl-rename
. Observe que este não é o utilitário rename
do pacote util-linux, que não fornece uma maneira fácil de fazer isso.
No zsh, você pode usar zmv
para renomear e l
sinalizador de expansão de parâmetro para preencher com zeros.
autoload -U zmv
zmv '(prefix-)(*)(.ext)' '$1${(l:3::0:)2}$3'
Você também pode fazer isso com um loop de shell simples. Os shells não possuem boas construções de manipulação de strings; Uma maneira de preencher com zeros é adicionar 1000 e remover os 1
.
for x in prefix-*.ext; do
n=${x%.ext}; n=${x##*-}; n=$((n+1000))
mv "$x" "${x%-*.ext}${n#1}${x##*-}"
done
Outra maneira é chamar o utilitário printf
.
for x in prefix-*.ext; do
n=${x%.ext}; n=${x##*-}
mv "$x" "${x%-*.ext}$(printf %03d "$n")${x##*-}"
done