我是 Linux 新手。我知道Linux中有一些通过终端在文件格式之间进行转换的方法。但有什么办法可以实现以下目标吗?
我有 3 个文件夹,在这些文件夹中,还有 15 个文件夹。每个文件夹都有 12 个 .xls 格式的文件,以及一些其他 .R 文件和 pdf 文件。有没有办法创建这 3 个文件夹的精确副本,其中所有 .xls 都转换为 .xlsx 格式?
如果以下内容看起来太不真实,那么如何将一个文件夹中的所有 .xls 文件转换为 .xlsx 文件格式?然后我就可以复制上述内容。
注意:我没有LibreOffice,我使用WPS。如果以下需要 LibreOffice 我可以根据需要安装它。
答案1
这将需要libreoffice
来自这个堆栈溢出问题Unix命令将xls文件转换为xlsx文件?:
libreoffice --convert-to xlsx my.xls --headless
请注意,该--convert-to
选项意味着该--headless
选项(当上面的 SO 答案于 2014 年编写时,它在 Libreoffice 版本 4.2.3 中没有,但自从至少2018 年的 Libreoffice 6,并且可能比这更长)。将其添加到命令行并没有什么坏处,但这不是必需的。
然后您可以将其集成到find
命令中:
find . -type f -name "*.xls" -exec libreoffice --convert-to xlsx {} \;
该命令将在当前目录中查找名称以 结尾的文件,并执行替换为文件名的.xls
命令。{}
自由办公室人状态 :
--convert-to output_file_extension[:output_filter_name] [--outdir output_dir] file...
批量转换文件。如果
--outdir
未指定,则当前工作目录将用作转换后文件的输出目录。这意味着--headless
例子:
--convert-to pdf *.doc
将所有 .doc 文件转换为 PDF。
--convert-to pdf:writer_pdf_Export --outdir /home/user *.doc
使用 Writer PDF 导出对话框中的设置将所有 .doc 文件转换为 PDF,并将其保存在 /home/user 中。
来自@cas 的评论,
libreoffice 可以采用多个文件名参数(手册页中的示例显示了这一点),因此作为 find 运行会更快。 -type f -name '*.xls' -exec libreoffice --convert-to xlsx {} + - 只需要运行 libreoffice 一次,而不是每个文件运行一次
find . -type f -name '*.xls' -exec libreoffice --convert-to xlsx {} +
答案2
对 @Nicolas 的答案进行小修改,使其适用于 MacOS:您必须指向 libreoffice 二进制文件,因为可能没有为 shell 定义命令“libreoffice”。就我而言,是:
find . -type f -name "*.xls" -exec /Applications/LibreOffice.app/Contents/MacOS/soffice --convert-to xlsx {} \;