Ошибка преобразования тысяч документов с помощью LibreOffice

Я пытаюсь конвертировать несколько тысяч документов из LWP (Lotus Word Pro) в DOC. Когда процесс конвертирования достигает примерно 250 (до 229 в некоторых случаях, 248 в других, 245 и т. Д. Около 250) документов, конвертируемых он просто выходит.

Линии терминала, которые я использую, чтобы преобразовать это:

soffice --headless --convert-to doc --outdir /home/cyrex/work/biopsias/2007 *.lwp

или же

libreoffice --headless --convert-to doc --outdir /home/cyrex/work/biopsias/2007 *.lwp

оба работают, но получают только около 250. У меня есть 60 тыс. документов для конвертации, и выполнение их по 200 за раз займет ОЧЕНЬ много времени.

Преобразование их в ODT также имеет ту же проблему.

У меня LibreOffice версия 3.5

ОБНОВЛЕНИЕ: я проверил, был ли файл 229 причиной. Я также проверил, был ли следующий или предыдущий файл причиной. Negative. Я даже удалил предыдущие 20 файлов до барьера 250 и 20 после него. Та же проблема. Я также без проблем открыл файл 229, файл 228 и файл 230 в LibreOffice. Это просто случайно проваливается до 250.

ОБНОВЛЕНИЕ 2: Попробовал с другой совершенно другой группой файлов, на этот раз, DOC. Снова это становится меньше чем ~250. На всякий случай, у меня есть следующее оборудование:

Процессор - Core i7 2600
RAM: 16 ГБ
HDD: 120 ГБ SSD
МОБО: Intel DZ68DB
ОС: Ubuntu 32 Bit

3 ответа

Решение

Я сделал следующее, но не буду отмечать это как ответ. Это только решает делать все преобразования. Проблема все еще существует. Он захватил идею из ответа Бьорна Михаэльсена (+1 к вашему другу).

Я сделал простой "конвертировать" файл с этим в нем:

for F in `find /home/cyrex/Desktop/mom/$1 -type f -name "*.lwp"`
do
soffice --headless --convert-to doc --outdir /home/cyrex/work/$2 $F
done

Он просто захватывает 2 переменные: ту, из которой я получаю документы, и ту, куда я отправляю их. Что-то вроде:

./convert inmuno/vph/2007-2009/2007 vph/2007

это позволит получить все в /home/cyrex/Desktop/mom/inmuno/vph/2007-2009/2007, преобразовать его в DOC и затем отправить в /home/cyrex/work/vph/2007.

Как я уже сказал, это наполовину запутанный ответ, который может помочь кому-то еще, пока не будет получен правильный ответ, используя только команду libreoffice / soffice.

Пожалуйста , установите libreoffice-dbg а также gdb и запустить: gdb /usr/lib/libreoffice/program/soffice.bin затем введите set args --headless --convert-to doc --outdir /home/cyrex/work/biopsias/2007 ${insert all files here}, Говоря о том, что, может быть, вы просто используете максимальную длину командной строки Linux? ulimit -s BIGMUMBER может помочь некоторым, но в конце концов вы, вероятно, в конечном итоге все еще на каком-то пределе. В этом случае вы должны использовать UNO API из скрипта или даже ставни, напишите небольшую программу StarBasic, делающую то, что вы хотите.

Редактировать: Вы, вероятно, должны сойти с рук apt-get install unoconv который вы можете передать строку подключения (-c) использовать работающий экземпляр LibreOffice. Таким образом: Запустите LibreOffice без головы и принимайте удаленные подключения. Тогда используйте unoconv удаленно вызвать LibreOffice для конвертации. Поскольку вы повторно используете один и тот же экземпляр, при использовании приложения не должно быть задержек при запуске xargs бросать ~200 документов в LibreOffice одновременно.

Звучит как сценарий использования bash-скрипта:)
Я использовал 'unoconv', потому что LO всегда возвращает true, даже когда происходит ошибка.

  • Загрузите связанный файл и назовите его "lo_convert.sh"
  • Сделайте это исполняемым chmod +x lo_convert.sh
  • Укажите файл dir и выходной формат (см. Инструкции скрипта)
  • Запустить скрипт ./lo_convert.sh
  • сделанный

скачать / посмотреть:

lo_convert.sh


PS: не мог понять, как вставить код напрямую (странный синтаксис...)

Другие вопросы по тегам