Extrai o número, algo como:
$ echo 'key 88--name.jpg' | sed 's/key \([0-9]\+\)--.*//'
88
Formate-o com printf:
$ printf '%04d' "88"
0088
reinsira isso no nome:
$ echo 'key 88--name.jpg' | sed 's/\(key [0-9]\+--\)/key 0088--/'
key 0088--name.jpg
Tudo em um script:
#!/bin/sh
for f in 'key '*'--name.jpg'; do
a="$( echo "$f" | sed 's/key \([0-9]\+\)--.*//' )"
b="$( printf '%04d' "$a" )"
c="$( echo "$f" | sed 's/\(key '"$a"'--\)/key '"$b"'--/' )"
echo \
mv -i "$f" "$c"
done
Ou ainda mais rápido:
#!/bin/sh
for f in 'key '*'--name.jpg'; do
a="${f#key }"
a="${a%--name.jpg}"
b="$( printf 'key %04d--name.jpg' "$a" )"
echo \
mv -i "$f" "$b"
done
Ambos os scripts não alteram nada. Eles apenas listarão o que será mudado. Se você está feliz com o que vê, apenas comente (adicione um # na frente de) a linha echo \
. Em qualquer caso, o comando mv não irá sobrescrever nenhum arquivo se o arquivo já existir (a opção -i).