Мне недавно захотелось странного - делать diff для файлов odt и pdf.
Скрипт вытаскивает текст из двух файлов (doc,odt,docx,pdf,xls,xlsx,ods,rtf) и сравнивает эти тексты в моей любимой программе meld.
Я применяю этот скрипт для сравнения файлов в Eclipse. Для этого надо поставить плагин (http://sourceforge.net/projects/externaldiff/). В SVN плагине Subversive уже есть функция External diff. А затем в качестве внешней команды сравнения настроить этот скрипт.
Установка зависимостей (команда для Ubuntu):
sudo apt-get install odt2txt python-pdfminer catdoc antiword unoconv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
#!/bin/bash DIFF_TOOL=/usr/bin/meld #DIFF_TOOL="diff -y -w"
TEMP_DIR=$(mktemp -d)
if [[ -z "$1" || -z "$2" || "$1" == "-h" || "$1" == "--help" ]]; then echo "Usage: $0 FILE1 FILE2" exit 0 fi
function get_conv { filename=$(basename "$1") extension="${filename##*.}" extension="${extension,,}" if [[ "$extension" == "pdf" ]]; then echo "pdf2txt" elif [[ "$extension" == "doc" ]]; then echo "antiword" # echo "catdoc" elif [[ "$extension" == "rtf" ]]; then echo "catdoc" elif [[ "$extension" == "odt" ]]; then echo "odt2txt" elif [[ "$extension" == "docx" ]]; then echo "unoconv -f text --stdout" elif [[ "$extension" == "ods" || "$extension" == "xls" || "$extension" == "xlsx" ]]; then echo "unoconv -f csv --stdout" else echo "Error! Unsupported file type" exit 1 fi } filename1=$(basename "$1")_1.txt filename2=$(basename "$2")_2.txt
command=$(get_conv "$1") $command "$1" > "$TEMP_DIR/$filename1" RESULT=$? if [ $RESULT -ne 0 ]; then echo "Error!" exit 1 fi
command=$(get_conv "$2") $command "$2" > "$TEMP_DIR/$filename2" RESULT=$? if [ $RESULT -ne 0 ]; then echo "Error!" exit 1 fi
$DIFF_TOOL "$TEMP_DIR/$filename1" "$TEMP_DIR/$filename2"
rm "$TEMP_DIR/$filename1" rm "$TEMP_DIR/$filename2" rmdir "$TEMP_DIR"
|
Github: https://github.com/sevka/bash-scripts