sevka 11.11.2013 19:02

Скриптыdiff для бинарных офисных файлов

Мне недавно захотелось странного - делать 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


Тэги: bash compare diff doc docx odt pdf word
+ 3 -
Похожие Поделиться