zmv で「${(l:e::s1::s2:)param}」を利用する。eは全体の長さ、s1は埋める文字、s2はparam左に挿入する文字列であり、s1とs2はオプションである(s1省略時はスペース埋め、s2はs1がある時のみ使用可能)。
zsh で以下を評価すればだいたいの挙動がわかると思う。
n=1
echo ${(l:10:)$((n))}
echo ${(l:10::0:)$((n))}
echo ${(l:10::0::5:)$((n))}
さて、0埋め連番リネームだが、これをzmvの第2引数に使えばいい。jpgファイルを1から始まる3桁0埋めしたいなら以下のようにできる。ファイル名を辞書順で並べた上から、001.jpg、002.jpg、…… というファイル名にリネームされる。
(n=1; zmv '*.jpg' '${(l:3::0:)$((n++))}.jpg')
ただし、リネーム前に 001.jpg などのファイルがあるとエラーが出るので、その場合は適当なプレフィックスなどを付けて連番リネームした後プレフィックスを削除する。
(n=1; zmv '*.jpg' 's${(l:3::0:)$((n++))}.jpg')
zmv 's(*).jpg' '$1.jpg'