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 .