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


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

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

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

komar-developer

  • Автор темы
  • Гость
Всем привет!
Сделал sudo apt-get install recode.
Делаю cat /home/leskov/test/file.php | recode -f WINDOWS-1251..UTF-8 > /home/leskov/test/file2.php
получаю перекодированный из Windows-1251 в UTF-8 файл, но!
Если я поменяю file.php на *.php то он будет перекодировать все .php из папки test, но сохранять в ОДИН файл.
Так вот. Что мне нужно вписать после WINDOWS-1251..UTF-8 > чтобы он сохранял каждый результат в отдельные файлы, имена которых такие же как у исходных, но с какой нибудь добавкой? Например, был file.php и file2.php а получаю (с добавкой буквы N) fileN.php и файл file2N.php.
Буду очень благодарен!
« Последнее редактирование: 20 Июня 2009, 17:08:48 от Komar-Developer »

Оффлайн Seenhelm

  • Участник
  • *
  • Сообщений: 164
  • Я разучился улыбаться
    • Просмотр профиля
Re: Массовое перекодирование файлов
« Ответ #1 : 20 Июня 2009, 17:12:32 »
типа того что-то в папке запустить  так понимаю ?
for i in *.php ; recode -f WINDOWS-1251..UTF-8 > “$i” “convert_$i“;done

komar-developer

  • Автор темы
  • Гость
Re: Массовое перекодирование файлов
« Ответ #2 : 20 Июня 2009, 20:04:38 »
Ох, как это меня напрягло. Не могу придумать ничего. Могу один перекодировать, но не могу массу :( Если массой делаю, то сохраняется всё в один файл. Seenhelm, пробовал твой метод и так и сяк. Не помогает. Немного не так нужно. Пытаюсь на перле набить, но перл я знаю хуже всего на свете =) Вроде уже ответ близок. Как только сделаю, сразу поделюсь.

Пользователь решил продолжить мысль 20 Июня 2009, 21:45:16:
Фу, блин! Мне уже плохо стало! Не могу решение найти, хоть ты тресни! Ни гугл ни яндекс ничего такого не знают. Уже каких только скриптов не написал, всё по боку! До завтра оставляю эту экзекуцию мозга. Завтра обещаю проблему решить и выложить скрипт в этой теме, а пока что пойду работать.
« Последнее редактирование: 20 Июня 2009, 21:45:16 от Komar-Developer »

Оффлайн tolstyj

  • Участник
  • *
  • Сообщений: 186
    • Просмотр профиля
Re: Массовое перекодирование файлов
« Ответ #3 : 20 Июня 2009, 22:58:40 »
Вот сварганил такой скриптик.
Запускать так

convert dir ext add
где convert - имя файла в который ты сохранил этот скрипт,
dir - расширение файлов, которые ты хочешь переконвертировать,
add - добавка, к имени файла .

Если параметры не заданы, то будут перекодированы все файлы с расширением .php в текущем каталоге и к имени файла будет добавлено _converted
(Нажмите, чтобы показать/скрыть)

komar-developer

  • Автор темы
  • Гость
Re: Массовое перекодирование файлов
« Ответ #4 : 21 Июня 2009, 00:08:55 »
 :D Спасибо, дружище! Заработало! Теперь я могу работать и не отвлекаться на писанину! =)
Маленький нюанс. Запустилось только так "/home/leskov/test/go /home/leskov/test php new".
То есть go - это имя скрипка, test - это папка с пхпшниками, php - php, ну а new приставка, но получается,
что немного не по твоему. Или это я уже того?!  :idiot2:
Еще момент, но для меня это не принципиально: файлы, в имени которых наблюдается пробел, не конвертирует.
Вместо них создает пустые new.php и оригиналы естественно не трогает.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Массовое перекодирование файлов
« Ответ #5 : 21 Июня 2009, 01:12:28 »
Еще момент, но для меня это не принципиально: файлы, в имени которых наблюдается пробел, не конвертирует.
Вместо них создает пустые new.php и оригиналы естественно не трогает.
Там надо закавычить переменную, где идёт код
cat "$i" | ...
« Последнее редактирование: 21 Июня 2009, 03:05:41 от ArcFi »

komar-developer

  • Автор темы
  • Гость
Re: Массовое перекодирование файлов
« Ответ #6 : 21 Июня 2009, 01:47:17 »
С циклами всё нормально. Ненормально с чтением имен файлов. Завтра буду ковырять.
А вообще я все же на C завтра перепишу по своему с финтифлюшками. Может кому понадобится.

Оффлайн tolstyj

  • Участник
  • *
  • Сообщений: 186
    • Просмотр профиля
Re: Массовое перекодирование файлов
« Ответ #7 : 21 Июня 2009, 02:25:33 »
С циклами всё нормально. Ненормально с чтением имен файлов. Завтра буду ковырять.
А вообще я все же на C завтра перепишу по своему с финтифлюшками. Может кому понадобится.

Замени все $i на "$i" тогда с пробелами не должно быть проблем. Я никогда не сознаю имена файлов с пробелами, потому и не обратил на это внимание.

#!/bin/bash

if [ -n "$1" ]
then
  directory="$1"        # Если каталог задан в командной строке при вызове сценария
else
  directory="$PWD"      # Иначе просматривается текущий каталог.
fi
 
if [ -n "$2" ]
then
file_ext="$2"           # Расширение файлов, которые нужно переконвертировать, если задано в командной строке при вызове сценария
else
file_ext=php          # Иначе будут переконвертированы все .php файлы.
fi

if [ -n "$3" ]
then
addition="$3"            #добавка к имени конвертированного файла, если задано в командной строке при вызове сценария
else
addition=_converted    # Иначе к имени файла будет добавлено _converted.
fi


for i in "$directory"/*.$file_ext;
 do
   fname=`basename "$i" .$file_ext`
   cat "$i" | recode -f WINDOWS-1251..UTF-8 > "$directory"/"$fname"$addition.$file_ext;
 done



komar-developer

  • Автор темы
  • Гость
Re: Массовое перекодирование файлов
« Ответ #8 : 21 Июня 2009, 02:58:17 »
Дык, я тоже не создаю, вот и сказал, что для меня это не принципиально, но всё же стало интересно =)
Спасибо тебе огромное! Проблем и правда теперь нет.
Сохранил твой скриптец, завтра буду на работе его активно применять на машинах подопытных =)
Еще бы GUI пришить, чтобы параметры через выпадающие меню и инпуты вбивать и можно в каноникал слать, пусть в синаптик добавят ;D

Пользователь решил продолжить мысль 21 Июня 2009, 03:04:59:
Еще момент, но для меня это не принципиально: файлы, в имени которых наблюдается пробел, не конвертирует.
Вместо них создает пустые new.php и оригиналы естественно не трогает.
Там надо закавычить переменную, где идёт код
cat "$i" | ...+
использовать цикл while
Я прочитал не закавычить а закавырить, по этому и не придал значения посту. Думал, что ты просто хотел "не умолчать" а теперь вижу, что реально помочь хотел! =) Спасибо и тебе!
« Последнее редактирование: 21 Июня 2009, 03:04:59 от Komar-Developer »

 

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