Импорт профиля Миранды в qutim

На прошлой неделе я написал о том, что решился наконец-то перейти с месенджера Miranda (которая работала в Ubuntu через wine) на qutim, и о том как перенести профиль qutim в онлайн хранилище Dropbox. Если вы не знаете, что такое хранилище Dxopbox и как его настроить для Ubuntu, то переходите по ссылке и читайте :) Но прежде чем переносить профиль qutim в Dropbox, нужно было сделать импорт профиля из миранды в qutim.

Импорт профиля для меня был важен из-за истории (хистори) сообщений которые там хранились. Собственно под импортом профиля и подразумевается импорт истории. В самой операции нет ничего сложного, так как в qutim существует инструмент, который так и называется - Импорт истории. Но в моем случае возникла небольшая трудность с кодировкой. Я сейчас не буду углубляться на причине, а сразу перейду к следствию (результату). Собственно все видно на рисунке:

qutim - проблема с кодировкой в хистори

Рисунок 1

Как видите в части сообщений в конце вырисовывается “квадратик”. Не то, чтобы это было критично (не так часто пользуешься историей), но как-то некрасиво. Поэтому решил избавиться от этого. История в qutim хранится в обычных текстовых файлах. Таких файлов у меня больше 1000. Символ “квадратика” при открытии файла через less выдавал свой код - /u0000. То есть нужно было просто из всех файлов удалить вот такую последовательность символов - /u0000. Учитывая количество и объем файлов без скрипта здесь не обойтись.

Сначала начал писать скрипт, но в итоге все оказалось гораздо проще и решение было, что называется в одну строку:

1
$ mkdir ./output; ls -1 *.json | while read filename; do sed 's:\\u0000::' "$filename" >> ./output/"$filename"; done

Если эту команду запустить из каталога с файлами истории, которые имеют расширение *.json, то будет создан подкаталог output в котором будут сохранены уже исправленные файлы. На всякий случай разберу эту строку для тех кто как и я не силен в bash и не совсем понял, что происходит.

Здесь все понятно создаем в текущем каталоге подкаталог output и ставим точку с запятой для разделения команд:

1
$ mkdir ./output;

Здесь результат вывода команды ls -1 *.json (а это будут имена файлов отображенные в один столбец) будет построчно идти на команду read, которая будет считывать значение в переменную filename. Команда read в свою очередь является частью обычного цикла while, который будет выполняться до тех пор пока команда read получает значения.

1
$ ls -1 *.json | while read filename; do  done

Здесь показана команда sed, которая будет выполнятся в цикле while. Команда sed s позволяет выполнить замену входящего потока данных в соответствии с шаблоном. Шаблон :\\u0000:: как раз и указывает, что нужно найти \u0000 и вместо него ничего не выводить (между вторым и третьим двоеточием пусто). Еще один символ \ нужен для того, чтобы \ интерпретировался как \, а не как начало escape-последовательности \u. С помощью команды >> заносим выходной (исправленный) поток в файл ./output/”$filename”.

1
sed 's:\\u0000::' "$filename" >> ./output/"$filename"

После этого остается только скопировать исправленные файлы туда, где им положено быть и убедиться, что теперь все отображается хорошо:

История в qutim без ошибок

Рисунок 2

Вот такая вот ситуация и такое решение проблемы.

Статьи и новости схожей тематики:

Оставьте свой отзыв