Melhor seria usar zsh de zmv :
autoload zmv # best in ~/.zshrc
zmv -n '(*)/index' '$1/C2_$1'
(remova -n quando feliz).
Para uma solução portátil ( POSIX sh ):
for dir in */index; do
mv -i -- "$dir" "${dir%/*}/C2_${dir%/*}"
done
(usando -i como um substituto do pobre para as verificações de sanidade zmv ).
Se você quisesse usar find portavelmente (POSIXly), você precisaria para esquecer -mindepth / -maxdepth , que você pode substituir com combinações de -path e -prune :
LC_ALL=C find . -path './*/*' -prune -name index -exec sh -c '
for dir do
top=${dir#./}
top=${top%/*}
mv -i -- "$dir" "$top/C2_$top"
done' sh {} +
Uma diferença com as outras duas abordagens é que ele não seguirá links simbólicos e também procurará index em diretórios ocultos.
Eles fazem uso dos operadores padrão de expansão de parâmetro ${var#pattern} , ${var%pattern} descritos em inúmeros Q & como aqui ou no especificação do shell POSIX .