Eu uso um script através do menu de contexto do meu gerenciador de arquivos para converter vários formatos de documentos (por exemplo, *.DOC) para o formato ODT como este:
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
Infelizmente, isso resulta na remoção de um arquivo sem conversão se estiver protegido por senha.
A saída do terminal nesse caso é "Erro: o arquivo de origem não pôde ser carregado"
Eu acho (e espero) que seria necessário um pouco mais de habilidades de script de shell para melhorar o script básico acima, para que o arquivo de entrada não seja removido, mas simplesmente ignorado (talvez com uma mensagem de erro ou arquivo de log também).
Em um mundo ideal
libreoffice
, você saberá com um código de saída que a conversão não ocorreu. Mas parece que não é o caso .Portanto, você tem pelo menos duas alternativas, uma é analisar o erro padrão e remover o arquivo somente se a mensagem de erro não estiver lá (você verifica o código de saída
grep
e espera que o pipe não seja quebrado antes disso):Outra possibilidade é verificar se o arquivo odt foi criado antes de remover a fonte (uma conversão incompleta pode desencadear a remoção). Algo assim: