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

at_*_*at_ 5 applescript doc docx libreoffice

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

命令:

 ./soffice --headless --convert-to docx --outdir /home/user ~/Downloads/*.doc
Run Code Online (Sandbox Code Playgroud)

完全做了它应该做的事情:它将所有*.doc文件转换为 libreoffice*.docx文件。

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

有没有办法从起始目录搜索所有文件夹,并让“soffice”在每个文件夹中完成其工作,将新版本 ( ) 存储在找到*.docx原始版本 ( ) 的位置。*.doc

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

感谢您的帮助。

use*_*894 7

有没有办法从起始目录搜索所有文件夹,并让“soffice”在每个文件夹中完成其工作,将新版本(.docx)准确存储在找到原始版本( .doc)的位置。

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

find '/path/to/directory' -type f -iname '*.doc' -execdir /Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to docx '{}' \;
Run Code Online (Sandbox Code Playgroud)

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

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


笔记:

  • 终端中运行命令之前,请务必确保您有正确的备份,并且键入的命令将产生所需的行为!

  • 命令假定子目录中不存在与文件同名.docx 文件,因为它会自动覆盖与这些文件同名的任何现有文件。据我所知,该命令没有提供不覆盖现有文件的选项。如果这将成为一个问题,那么就需要不同的解决方案。.doc .docx .doc soffice