guvijur
@guvijur
Практик, кинестетик, ретроград и консерватор

Как написать скрипт на bash, который ищет рекурсивно каталоги и переименовывает их?

Добрый день!
Есть компьютерс с CentOS 6. Там есть каталог, в который с Windows сервера была перенесена почта пользователей.
Проблема в том, что почтовый сервер MDaemon, который работает на виндовом серваке, все русскоязычные папки пользователей подвергает двойному кодированию: сначала он кодирует в UTF-16BE, а потом полученный результат кодирует base64. После чего перед полученным словом добавляется знак "&", а двойное равно (==) заменяется на дефис (ну или минус). И в самом конце к имени папки добавляется ".IMAP". Т.е.,имя русскоязычной папки выглядит вот так (вместе с путём): "Users\domain.ru\ivanov.i\&BBoEPgQ9BEIEMAQ6BEIESw-.IMAP".
Мне же надо перекодировать все такие папки в UTF8. Т.е., мне надо, чтобы скрипт рекурсивно обошёл все каталоги, нашёл в них каталоги, начинающиеся на символ &, заменил минус на 2 равно, убрал из имени каталога символ &, раскодировал с помощью base64 и перекодировал из UTF-16BE в UTF-8.
Я уже сломал голову.

На данный момент я пытаюсь написать свой вариант, но если у кого-то есть более простое решение, то помогите тугодуму.
Спасибо.
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 1
icCE
@icCE
youtube.com/channel/UC66N_jRyZiotlmV95QPBZfA
Вам надо убрать символ & и все , что после -

Для этого можно воспользоватся sed sed -e 's|.*&||; s|-.*|| '

5cee8535b1ccd905766557.jpeg

Дальше по разному можно подойти к вопросу, можно использовать find .

find . -name "&*" -a -name "*IMAP" | sed -e 's|.*&||; s|-.*|| '


найти как из base64 и все остальное я думаю найдете сами.
В итоге , можно будет все объединить в один код.

P.S. Это все примеры, прежде чем пробовать создайте отдельный тестовый стенд и сделайте резервную копию ваших данных. Это не готовое решение.

P.P.S.
заменил минус на 2 равно

Проморгал условие, думал надо убрать. Но в общем примеры по sed я думаю и так найдете как заменить, а не удалить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы