Если у вас есть 2-3 огромных pdf (или epub или других форматов, читайте ниже) файлы для сравнения, тогда можно объединить мощность:
калибр (чтобы преобразовать ваш источник в текст ) meld (для визуального поиска различий между текстовыми файлами) параллельно (для использования всех ваших системных ядер для ускорения)Ниже сценария принимают в качестве входного файла любой из следующих форматов файлов: MOBI, LIT, PRC , EPUB, ODT, HTML, CBR, CBZ, RTF, TXT, PDF и LRS.
Если не установлено, установите meld, caliber и parallel:
#install packages
sudo apt-get -y install meld calibre parallel
в состоянии выполнить код из любого места на вашем компьютере, сохраните следующий код в файле с именем «diffepub» (без расширений) внутри каталога «/ usr / local / bin».
usage="
*** usage:
diffepub - compare text in two files. Valid format for input files are:
MOBI, LIT, PRC, EPUB, ODT, HTML, CBR, CBZ, RTF, TXT, PDF and LRS.
diffepub -h | FILE1 FILE2
-h print this message
Example:
diffepub my_file1.pdf my_file2.pdf
diffepub my_file1.epub my_file2.epub
v0.2 (added parallel and 3 files processing)
"
#parse command line options
while getopts "h" OPTIONS ; do
case ${OPTIONS} in
h|-help) echo "${usage}"; exit;;
esac
done
shift $(($OPTIND - 1))
#check if first 2 command line arguments are files
if [ -z "$1" ] || [ -z "$2" ] || [ ! -f "$1" ] || [ ! -f "$2" ]
then
echo "ERROR: input files do not exist."
echo
echo "$usage"
exit
fi
#create temporary files (first & last 10 characters of
# input files w/o extension)
file1=`basename "$1" | sed -r -e '
s/\..*$// #strip file extension
s/(^.{1,10}).*(.{10})/\1__\2/ #take first-last 10 chars
s/$/_XXX.txt/ #add tmp file extension
'`
TMPFILE1=$(mktemp --tmpdir "$file1")
file2=`basename "$2" | sed -r -e '
s/\..*$// #strip file extension
s/(^.{1,10}).*(.{10})/\1__\2/ #take first-last 10 chars
s/$/_XXX.txt/ #add tmp file extension
'`
TMPFILE2=$(mktemp --tmpdir "$file2")
if [ "$#" -gt 2 ]
then
file3=`basename "$3" | sed -r -e '
s/\..*$// #strip file extension
s/(^.{1,10}).*(.{10})/\1__\2/ #take first-last 10 chars
s/$/_XXX.txt/ #add tmp file extension
'`
TMPFILE3=$(mktemp --tmpdir "$file3")
fi
#convert to txt and compare using meld
doit(){ #to solve __space__ between filenames and parallel
ebook-convert $1
}
export -f doit
if [ "$#" -gt 2 ]
then
(parallel doit ::: "$1 $TMPFILE1" \
"$2 $TMPFILE2" \
"$3 $TMPFILE3" ) &&
(meld "$TMPFILE1" "$TMPFILE2" "$TMPFILE3")
else
(parallel doit ::: "$1 $TMPFILE1" \
"$2 $TMPFILE2" ) &&
(meld "$TMPFILE1" "$TMPFILE2")
fi
Убедитесь, что владелец - ваш пользователь, и у него есть разрешения на выполнение:
sudo chown $USER:$USER /usr/local/bin/diffepub
sudo chmod 700 /usr/local/bin/diffepub
Чтобы проверить его, просто введите:
diffepub FILE1 FILE2
Я тестирую его, чтобы сравнить 2 версии +1600 страниц pdf, и он отлично работает. Поскольку калибр написан с использованием python для переносимости, потребовалось 10 минут для преобразования обоих файлов в текст. Медленный, но надежный.
При распаковке файла tar.gz используйте «tar -xvzf» вместо «taf -xvf». «-z» указывает tar на чтение или запись архивов через gzip, позволяя tar напрямую работать с несколькими видами сжатых архивов прозрачно. Эта опция должна использоваться, например, при работе с файлами с расширением .tar.gz. " (источник: http://www.computerhope.com/unix/utar.htm)