Ошибка преобразования тысяч документов с помощью 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: не мог понять, как вставить код напрямую (странный синтаксис...)