lo_convert.sh

lo_convert.sh

我正在尝试将几千个文档从 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 左右。我有 60K 个文档需要转换,如果一次转换 200 个文档的话会花掉很多时间。

将它们转换为 ODT 也存在同样的问题。

我有 LibreOffice 3.5 版本

更新:我检查了 229 文件是否是原因。我还检查了以下或前一个文件是否是原因。答案是否定的。我甚至删除了 250 障碍之前的 20 个文件和之后的 20 个文件。同样的问题。我还使用 LibreOffice 打开了 229 文件、228 文件和 230 文件,没有问题。只是在 250 之前随机失败。

更新 2:尝试了另一组完全不同的文件,这次是 DOC。再次,它达到不到 ~250。为了以防万一,我有以下硬件:

CPU - Core i7 2600
内存:16GB
硬盘:120GB SSD
主板:Intel DZ68DB
操作系统:Ubuntu 32 位

答案1

请安装libreoffice-dbggdb运行:gdb /usr/lib/libreoffice/program/soffice.bin然后输入set args --headless --convert-to doc --outdir /home/cyrex/work/biopsias/2007 ${insert all files here}。说到这个,也许你只是达到了 Linux 的最大命令行长度?Aulimit -s BIGMUMBER可能会有所帮助,但最终你可能仍会受到某种限制。在这种情况下,你应该使用脚本中的 UNO API,甚至快门编写一个小型的 StarBasic 程序来执行您想做的事情。

编辑:您可能应该apt-get install unoconv能够通过传递连接字符串 ( -c) 来使用正在运行的 LibreOffice 实例。因此:无头启动 LibreOffice 并接受远程连接。然后使用远程触发 LibreOffice 进行转换。由于您正在重复使用同一个实例,因此当您一次向 LibreOffice 发送约 200 个文档时,unoconv应用程序启动应该不会延迟。xargs

答案2

我做了以下事情,但不会将其标记为答案。这只能解决整个转换的问题。问题仍然存在。它从 Bjoern Michaelsen 的答案中汲取了一个想法(+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 命令就能得到正确的答案。

答案3

听起来像是 bash 脚本的一个用例 :)
我使用了“unoconv”,因为 LO 总是返回真的,即使发生错误。

  • 下载链接文件并将其命名为“lo_convert.sh”
  • 使其可执行chmod +x lo_convert.sh
  • 指定文件目录和输出格式(参见脚本说明)
  • 运行脚本./lo_convert.sh
  • 完毕

下载/查看:

lo_convert.sh


附言:无法弄清楚如何直接插入代码(奇怪的语法......)

相关内容