![]() |
[BASh] Рекурсивный обход с переименованием
Доброго дня!
Обратился пользователь с проблемой, в сетевой папке у большинства файлов с кириллическим названием слетела кодировка. Сами файлы не повреждены, только имена. Сетевой ресурс находится на машинке с Ubuntu Server 12.04 Помучившись я пришел к такой строчке: Код:
iconv -f utf8 -t cp437 -c Осталось автоматизировать, с файлами проблем не возникло: Код:
find * -type f | while read line;do Код:
find * -type d | grep -v "/" | while read line;do Число вложенных папок варьируется от 1 до 50+ и результат такого скрипта: Код:
find * -type d | grep "/" | while read line;do Вся проблема в том, что при переборе переименовывается родительская папка, следовательно дочерние не доступны. А повторное использование iconv либо оставляет вообще непонятные знаки, либо файлы "исчезают" (они становятся безымянными). Может у кого нибудь был такой опыт? |
convmw посмотрите...
Еще как вариант ваш код обернуть циклами и менять кодировку начиная с максимальной глубины, но велосипед получился медленный и некрасивый :) |
Цитата:
В отличии от моего варианта он выдает ошибку на имена с кодировкой отличной от указанной (-t), т.е. не делает: Цитата:
Но с этим мы быстро справились :-) Цитата:
Первый раз я допустил ошибку и прошелся по корню, благо там кириллицы не было |
Цитата:
|
Время: 15:28. |
Время: 15:28.
© OSzone.net 2001-