다음과 같이 파일 관리자 컨텍스트 메뉴를 통해 스크립트를 사용하여 다양한 문서 형식(예: *.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
안타깝게도 파일이 비밀번호로 보호되어 있으면 파일이 변환되지 않고 삭제될 수 있습니다.
이 경우 터미널 출력은 "오류: 소스 파일을 로드할 수 없습니다"입니다.
입력 파일이 삭제되지 않고 단순히 건너뛰도록(오류 메시지나 로그 파일도 가능) 위의 매우 기본적인 스크립트를 개선하려면 쉘 스크립팅 기술이 좀 더 필요하다고 상상합니다(그리고 희망합니다).
답변1
이상적인 상황에서는 libreoffice
종료 코드를 통해 변환이 발생하지 않았음을 알려줄 것입니다. 하지만꼭 그렇지는 않은 것 같습니다.
따라서 최소한 두 가지 옵션이 있습니다. 하나는 표준 오류를 구문 분석하고 오류 메시지가 존재하지 않는 경우에만 파일을 삭제하는 것입니다(종료 코드를 확인 grep
하고 그 전에 파이프가 파괴되지 않기를 바랍니다).
for filename in "${@}"; do
libreoffice --headless --convert-to odt "$filename" 2>&1 | grep "source file could not be loaded" || rm "$filename"
done
또 다른 가능성은 소스를 삭제하기 전에 odt 파일이 생성되었는지 확인하는 것입니다(불완전한 변환으로 인해 삭제가 발생할 수 있음). 이 같은:
for filename in "${@}"; do
libreoffice --headless --convert-to odt "$filename"
test -f ${filename%.*}.odt && rm "$filename"
done