Скрипт переименования папок

Модератор: Модераторы разделов

Linuxforum
Сообщения: 59
ОС: Ubuntu 7.10

Скрипт переименования папок

Сообщение Linuxforum »

В нескольких папках в линуксе есть папки вида "2007 - Название", надо их переименовать в "Название (2007)".
Причем есть папки и с другим оформлением названия, их нельзя трогать.
Помогите пожалуйста написать такой скрипт. :blush:
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Скрипт переименования папок

Сообщение allez »

Да тут скрипт не так уж и обязателен:

Код: Выделить всё

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)'
Спасибо сказали: