我有一个包含 MSWord 文件 .doc 的目录树。我想将它们全部转换为 .odt。
语法是:
soffice --headless --convert-to odt -r --outdir <dir to place the .odt> *.doc
我尝试使用它来find
一次性完成所有操作。我尝试过以下方法:
find . -name "*.doc" -exec soffice --headless --outdir dirname {} --convert-to odt {} \;
和
find . -name "*.doc" -exec soffice --headless --outdir $("dirname '{}'") --convert-to odt {} \;
但两次都失败了。我该怎么办?
答案1
改为使用-execdir
。它将在包含该文件的同一目录中执行该命令。详细信息记录在man find
。
find . -name '*.doc' -exec soffice --headless --convert-to odt {} \;
你的第一个示例失败了,因为dirname
被解释为 exec 选项的参数。执行的命令将具有dirname
作为参数的--outdir
文件路径(作为位置参数)soffice --headless --outdir dirname <file> --convert-to odt <file>
在第二个示例中,$("dirname '{}'")
由 shell 进行评估,并在执行之前替换输出寻找替换的结果将为空,并且“找不到命令”将打印在标准错误--outdir
. 执行的命令根本没有所需的参数soffice --headless --outdir --convert-to odt <file>