将文件夹系统内的所有 .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 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何通过api将文本文档(ODT或DOCX)中的表格导出为EMF格式
将 .odt .doc .ods 文件转换为 .txt 文件
在 Windows 上使用 Openoffice 将 ODT 转换为 PDF