Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Смена кодировок имен файлов и папок  (Прочитано 5900 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн VelzeVul

  • Автор темы
  • Новичок
  • *
  • Сообщений: 46
  • Заместитель Сотоны
    • Просмотр профиля
Добрый день, возник вопрос, надеюсь на вашу помощь.
Есть сервак на нем proftpd версии 1,3,3а, нужно что бы все файла и папки падающие в определенную папку меняли кодировку имени на ср1251.
Для этого использую пакет convmv. Выглядит это так: В кронд поставлен на выполнение скрипт:

#! /bin/sh
#Конвертируем все файлы в папке
convmv -f utf-8 -t cp1251 -r -notest /home/test/test/* 2>&1 | tee -a mv.log

Но штука в том что если в папке есть файл уже в кодировке ср1251 то скрипт прекращает свое выполнение с ошибкой.

This file was not validly encoded in UTF-8: "/home/test/test/тест.rar"
To prevent damage to your files, we won't continue.
First fix this or correct options!

Хотя по мимо него там есть еще файлы которые именно в utf-8, но стоит ему только "запнуться" как работа скрипта прекращается

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

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Смена кодировок имен файлов и папок
« Ответ #1 : 05 Декабря 2011, 11:17:02 »
find ... -exec ...?

Оффлайн VelzeVul

  • Автор темы
  • Новичок
  • *
  • Сообщений: 46
  • Заместитель Сотоны
    • Просмотр профиля
Re: Смена кодировок имен файлов и папок
« Ответ #2 : 05 Декабря 2011, 11:28:05 »
find ... -exec ...?
Была такая мысль, но было бы хорошо если бы вы подсказали какой командой можно получить кодировку имени файла или папки и тогда уже if...then...

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Смена кодировок имен файлов и папок
« Ответ #3 : 05 Декабря 2011, 13:14:38 »
какой командой можно получить кодировку имени файла
Можно угадать с некоторой достоверностью через enca, но есть ли смысл...
И так само будет пропускать файлы, которые уже переименованы.

По хорошему, конечно, надо работать с utf8.
cp1251 -- это унылое вендовое наследие.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Смена кодировок имен файлов и папок
« Ответ #4 : 05 Декабря 2011, 13:49:01 »
По хорошему, конечно, надо работать с utf8.
cp1251 -- это унылое вендовое наследие.
+1

Оффлайн VelzeVul

  • Автор темы
  • Новичок
  • *
  • Сообщений: 46
  • Заместитель Сотоны
    • Просмотр профиля
Re: Смена кодировок имен файлов и папок
« Ответ #5 : 06 Декабря 2011, 07:05:31 »
На счет enca пробовал, но почему-то выдает unrecognized encoding, хотя возможно я ей попросту не правильно пользуюсь, подскажите как ей получить кодировку имени? А на счет убогости ср1251 согласен, но большинство клиетов под "маздаем" и им не видно utf8 =)

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Смена кодировок имен файлов и папок
« Ответ #6 : 06 Декабря 2011, 08:08:04 »
$ touch 'привет, мир!'

$ convmv -f utf-8 -t cp1251 --notest *
Your Perl version has fleas #37757 #49830
mv "./привет, мир!" "./������, ���!"
Ready!

$ echo * | enca -L ru
MS-Windows code page 1251
  LF line terminators

Оффлайн VelzeVul

  • Автор темы
  • Новичок
  • *
  • Сообщений: 46
  • Заместитель Сотоны
    • Просмотр профиля
Re: Смена кодировок имен файлов и папок
« Ответ #7 : 06 Декабря 2011, 09:41:53 »
Решил проблему так
find /home/test/test/* -exec convmv -f utf-8 -t cp1251 -r --notest {} \;
я понимаю это так find находит файлы в папке и для каждого в отдельности выполняет команду.
Может кому пригодится.  ;)
Как закрыть тему?
« Последнее редактирование: 06 Декабря 2011, 09:48:34 от VelzeVul »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Смена кодировок имен файлов и папок
« Ответ #8 : 06 Декабря 2011, 09:45:45 »
find /home/test/test/* -exec convmv -f utf-8 -t cp1251 -r --notest {} \;
Ключ -r избыточен, ибо find сам по себе рекурсивен.

Оффлайн VelzeVul

  • Автор темы
  • Новичок
  • *
  • Сообщений: 46
  • Заместитель Сотоны
    • Просмотр профиля
Re: Смена кодировок имен файлов и папок
« Ответ #9 : 06 Декабря 2011, 09:52:45 »
find /home/test/test/* -exec convmv -f utf-8 -t cp1251 -r --notest {} \;
Ключ -r избыточен, ибо find сам по себе рекурсивен.
-r используется для переименования имён каталогов.
« Последнее редактирование: 06 Декабря 2011, 10:00:20 от VelzeVul »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Смена кодировок имен файлов и папок
« Ответ #10 : 06 Декабря 2011, 10:13:35 »
-r используется для переименования имён каталогов.
Нет. Можете проверить.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Смена кодировок имен файлов и папок
« Ответ #11 : 06 Декабря 2011, 11:16:27 »
find /home/test/test/* -exec convmv -f utf-8 -t cp1251 -r --notest {} \;
я понимаю это так find находит файлы в папке и для каждого в отдельности выполняет команду.
Можно ограничить поиск только файлами (без директорий), например так
find /home/test/test -type f ...

Оффлайн VelzeVul

  • Автор темы
  • Новичок
  • *
  • Сообщений: 46
  • Заместитель Сотоны
    • Просмотр профиля
Re: Смена кодировок имен файлов и папок
« Ответ #12 : 06 Декабря 2011, 11:50:51 »
find /home/test/test/* -exec convmv -f utf-8 -t cp1251 -r --notest {} \;
я понимаю это так find находит файлы в папке и для каждого в отдельности выполняет команду.
Можно ограничить поиск только файлами (без директорий), например так
find /home/test/test -type f ...
Да фишка в том, что как раз  нужно, чтоб и каталоги тоже меняли кодировку, что сейчас и работает.
arcfi вы правы "-r" не играет роли, а так идея с find ваша, за что вам спасибо.

 

Страница сгенерирована за 0.057 секунд. Запросов: 25.