LibreOffice:递归转换文件夹和子文件夹中的文档

问题描述

我以 doc 格式存储了许多文件,这些文件只能在我的 mac 上使用 libreoffice 打开。

命令:

 ./soffice --headless --convert-to docx --outdir /home/user ~/Downloads/*.doc

完全按照它应该做的:它将所有 *.doc 文件转换为 libreoffice *.docx 文件

我的问题是我有包含这些文件文件夹和子文件夹。

有没有办法从起始目录中搜索所有文件夹,并让“soffice”在每个文件夹中完成其工作,将新版本 (*.docx) 准确存储在原始 ({{ 1}}) 被发现。

不幸的是,我不精通苹果脚本或终端来完成这项工作。然而,数百个文件夹中的 8000 个 doc 文件需要更新到 docx。

感谢您的帮助。

解决方法

有什么方法可以从起始目录中搜索所有文件夹,并让“soffice”在每个文件夹中完成其工作,将新版本 (.docx) 准确存储在原始目录 ( em>.doc) 已找到。

这实际上可以在终端中使用find命令来完成:

find '/path/to/directory' -type f -iname '*.doc' -execdir /Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to docx '{}' \;

在上面的命令示例中,将'/path/to/directory'更改为包含的目标目录的实际路径名子目录包含.doc文件

这个 find command 的作用,简而言之,就是在 分层目录结构中查找所有 .doc 文件 '/path/to/directory' 的 em> 并在包含 .doc 文件 的每个 子目录 中执行 command 并转换每个位于其子目录中。


注意事项:

  • 终端中运行命令之前,始终确保您有适当的备份,并且输入的命令将产生所需的行为!

  • 这个命令假定已经没有.docx文件.doc具有相同的名称 子目录中的文件,因为它会自动覆盖与名称具有相同名称的任何现有.docx文件 .doc 文件。据我所知,soffice command 不提供不覆盖现有文件的 选项。如果这会成为一个问题,则需要不同的解决方案。