我通过文件管理器上下文菜单使用脚本将各种文档格式(例如 *.DOC)转换为 ODT 格式,如下所示:
for filename in "${@}"; do
if [[ -f "${filename%.*}.odt" ]]
then
newfile="${filename%.*}_$(stat "$filename" | grep "Modify" | awk -F " " '{print $2}').odt"
mv "${filename%.*}.odt" "${filename%.*}.tmp"
libreoffice --headless --convert-to odt "$filename"
mv "${filename%.*}.odt" "$newfile"
touch "$newfile" -r "$filename"
mv "${filename%.*}.odt.tmp" "${filename%.*}.odt"
rm "$filename"
else
libreoffice --headless --convert-to odt "$filename"
touch "${filename%.*}.odt" -r "$filename"
rm "$filename"
fi
done
不幸的是,如果文件受密码保护,这会导致删除文件而不进行转换。
这种情况下的终端输出是“错误:无法加载源文件”
我想(并希望)只需要更多的 shell 脚本技能来改进上面的非常基本的脚本,这样输入文件就不会被删除,而只是被跳过(可能还有错误消息或日志文件)。
在理想的世界
libreoffice
中,会通过退出代码让您知道转换没有发生。但似乎并非如此。因此,您至少有两种选择,一种是解析标准错误并仅在错误消息不存在时删除文件(您检查退出代码
grep
并希望在此之前管道不会被破坏):另一种可能性是在删除源之前检查是否已创建 odt 文件(但不完整的转换可能会触发删除)。像这样的东西: