Лучше всего использовать zsh
zmv
:
autoload zmv # best in ~/.zshrc
zmv -n '(*)/index' '$1/C2_$1'
(удалите -n
, когда все в порядке).
Для переносимого ( POSIX sh
) решения:
for dir in */index; do
mv -i -- "$dir" "${dir%/*}/C2_${dir%/*}"
done
(с использованием -i
в качестве эрзаца для бедняков для проверки работоспособности zmv
делает).
Если вы хотите использовать find
переносимо (POSIXly), вам нужно забыть о -mindepth
/ -maxdepth
, который можно заменить на комбинации -path
и -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 {} +
Одно отличие от двух других подходов состоит в том, что он не будет следовать символическим ссылкам и также будет искать index
в скрытых каталогах.
Они используют стандартные операторы расширения параметров $ {var # pattern}
, $ {var% pattern}
, описанные в бесчисленных вопросах и ответах здесь или в оболочке POSIX. спецификация .