将文件夹系统内的所有 .docx 转换为 .odt,然后删除所有 .docx 文件

Posted

技术标签:

【中文标题】将文件夹系统内的所有 .docx 转换为 .odt,然后删除所有 .docx 文件【英文标题】:Convert all .docx to .odt inside folder system and then delete all .docx files 【发布时间】:2015-04-08 04:59:29 【问题描述】:

我有一个文件夹系统,其中包含 2 级深子文件夹。每个文件夹都有一些 .docx 文件和其他文件。

我需要做的是,我想将所有这些 .docx 文件转换为 .odt 文件,然后我想删除这些旧的 .docx 文件以消除重复。

我得到了 bash 命令Linux Command to convert .docx to .odt,但是要运行这个命令,我必须通过终端进入 .docx 文件所在的文件夹。

所以我正在寻找 1 个自动执行此操作的 linux 命令或 shell 文件脚本。

提前致谢。

【问题讨论】:

看看find 和它的选项-exec command \; @Cyrus thnxx 这将帮助我转换文件夹系统中的所有文件,但如何删除旧的重复文件。 【参考方案1】:

如果您使用的是zsh 或bash version 5.0 or higher,这很简单:

 #!/bin/zsh
 cd $1 && libreoffice --headless --convert-to odt **/*.docx

对于任何类似 sh 的 shell,您也可以使用以下管道进行操作:

 #!/bin/sh
 find $1 -name '*.docx' -print | xargs libreoffice --headless --convert-to odt 
 cd $1 && find $1 -name '*.docx' -delete

【讨论】:

当设置了globstar 选项时,**/*.docx 在 bash(版本 >= 4.x)中也可用。 我显然不使用 bash,将编辑我的答案以反映,在大多数(非 Linux)Unix 系统上发现的纯 /bin/sh 根本不做 glob。跨度> @hd1 感谢您的出色努力。但是当我执行您的命令时,它会在相应文件夹内和文件夹外创建 .odt 文件,并且不会从文件夹内删除 .docx 文件。 (例如,我的文件夹系统是“上传 -> 文件夹 A -> .docx 文件”,所以文件夹 A 内有 5 个 .docx 文件,所以我在上传文件夹内执行命令,并在输出中创建上传文件夹内的 5 个 .odt 文件和 A 文件夹内的 10 个文件,其中 5 个 .odt 和 5 个 .docx )

以上是关于将文件夹系统内的所有 .docx 转换为 .odt,然后删除所有 .docx 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 pandoc 中将 .odt 转换为 .docx

如何通过api将文本文档(ODT或DOCX)中的表格导出为EMF格式

将 .odt .doc .ods 文件转换为 .txt 文件

在 Windows 上使用 Openoffice 将 ODT 转换为 PDF

Qt笔记-利用QAxObject将文件夹内的所有docx转pdf

Qt笔记-利用QAxObject将文件夹内的所有docx转pdf