|
Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [BASh] Рекурсивный обход с переименованием |
|
[BASh] Рекурсивный обход с переименованием
|
Пользователь Сообщения: 69 |
Профиль | Отправить PM | Цитировать Доброго дня!
Обратился пользователь с проблемой, в сетевой папке у большинства файлов с кириллическим названием слетела кодировка. Сами файлы не повреждены, только имена. Сетевой ресурс находится на машинке с Ubuntu Server 12.04 Помучившись я пришел к такой строчке: Она конвертирует из этих кракозябр в человеческий вид. Осталось автоматизировать, с файлами проблем не возникло: find * -type f | while read line;do name=`echo $line| awk -F"/" '{print $NF}'`; fname=`echo $name |iconv -f utf8 -t cp437 -c`; dname=`echo $line | sed "s/[^/]*$//"`; fullname="$dname$fname"; echo $fullname; mv "$line" "$fullname"; done; find * -type d | grep -v "/" | while read line;do name=`echo $line| awk -F"/" '{print $NF}'`; fname=`echo $name |iconv -f utf8 -t cp437 -c`; dname=`echo $line | sed "s/[^/]*$//"`; fullname="$dname$fname"; echo $fullname; mv "$line" "$fullname"; done; Число вложенных папок варьируется от 1 до 50+ и результат такого скрипта: find * -type d | grep "/" | while read line;do name=`echo $line| awk -F"/" '{print $NF}'`; fname=`echo $name |iconv -f utf8 -t cp437 -c`; dname=`echo $line | sed "s/[^/]*$//"`; fullname="$dname$fname"; echo $fullname; mv "$line" "$fullname"; done; Вся проблема в том, что при переборе переименовывается родительская папка, следовательно дочерние не доступны. А повторное использование iconv либо оставляет вообще непонятные знаки, либо файлы "исчезают" (они становятся безымянными). Может у кого нибудь был такой опыт? |
|
Отправлено: 17:58, 18-07-2014 |
Ветеран Сообщения: 740
|
Профиль | Отправить PM | Цитировать convmw посмотрите...
Еще как вариант ваш код обернуть циклами и менять кодировку начиная с максимальной глубины, но велосипед получился медленный и некрасивый |
Последний раз редактировалось User001, 21-07-2014 в 09:50. Отправлено: 09:30, 21-07-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Цитата User001:
В отличии от моего варианта он выдает ошибку на имена с кодировкой отличной от указанной (-t), т.е. не делает: Цитата blackmane:
Но с этим мы быстро справились :-) Цитата User001:
Первый раз я допустил ошибку и прошелся по корню, благо там кириллицы не было |
|||
Отправлено: 12:13, 22-07-2014 | #3 |
Ветеран Сообщения: 740
|
Профиль | Отправить PM | Цитировать Цитата blackmane:
|
|
Отправлено: 12:25, 22-07-2014 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Рекурсивный обход папки | Ван Рег | Скриптовые языки администрирования Windows | 7 | 05-11-2011 01:03 | |
CMD/BAT - [решено] Рекурсивный обход папок с применением команды chdir | smit_igor | Скриптовые языки администрирования Windows | 2 | 05-06-2011 15:02 | |
VBS/WSH/JS - [решено] Рекурсивный обход папок в WSH на JS | petrovre | Скриптовые языки администрирования Windows | 5 | 20-02-2011 22:44 | |
CMD/BAT - [решено] Рекурсивный обход | Чин Хон | Скриптовые языки администрирования Windows | 2 | 22-01-2011 23:12 | |
CMD/BAT - Рекурсивный обход папки | Chargos | Скриптовые языки администрирования Windows | 1 | 30-12-2010 18:37 |
|