Причем есть папки и с другим оформлением названия, их нельзя трогать.
Помогите пожалуйста написать такой скрипт.

Модератор: Модераторы разделов
Код: Выделить всё
find /where/to/search -type d -name "[0-9][0-9][0-9][0-9]*-*" | while read FULLPATH; do DIRNAME=$(basename "${FULLPATH}"); DIRPATH=$(dirname "${FULLPATH}"); DIRYEAR=$(echo "${DIRNAME}" | cut -d '-' -f 1 | sed 's/ $//'); DIRTITLE="$(echo "${DIRNAME}" | cut -d '-' -f 2- | sed 's/^ //')"; mv -v "${FULLPATH}" "${DIRPATH}/${DIRTITLE} (${DIRYEAR})"; done
...
home:~ $ ls /tmp | grep "^[0-9]\{4\}.*-.*"
2005 - blah blah blah
2006 - foo foo foo
2007 - Some title
2008 - Another title
home:~ $ find /tmp -type d -name "[0-9][0-9][0-9][0-9]*-*" | \
while read FULLPATH; \
do \
DIRNAME=$(basename "${FULLPATH}"); \
DIRPATH=$(dirname "${FULLPATH}"); \
DIRYEAR=$(echo "${DIRNAME}" | cut -d '-' -f 1 | sed 's/ $//'); \
DIRTITLE="$(echo "${DIRNAME}" | cut -d '-' -f 2- | sed 's/^ //')"; \
mv -v "${FULLPATH}" "${DIRPATH}/$DIRTITLE ($DIRYEAR)"; \
done
`/tmp/2008 - Another title' -> `/tmp/Another title (2008)'
`/tmp/2007 - Some title' -> `/tmp/Some title (2007)'
`/tmp/2006 - foo foo foo' -> `/tmp/foo foo foo (2006)'
`/tmp/2005 - blah blah blah' -> `/tmp/blah blah blah (2005)'