Есть простой шелл-скрипт, который по крону бекапит исходники сайта в tar-архив, и сразу же оный отправляется mutt-ом на gmail. Поскольку гмаил не допускает более 20мб вложение, архив делится на меньшие куски. Проблема: после скачивания частей бекапа с гмаила(стандартно через веб-морду) при попытке развернуть склееный архив возникает ошибка. Один из кусков не совпадает контрольной суммой с указанной в письме. Отправляется всё по очереди и корректно, а скачивается «кривым». Похоже, что ошибка получается только в последнем куске серии. При создании бекапа пробовал делить на части на лету через пайпы, пробовал уже готовый архив разрезать — результат одинаков. Контрольные суммы перед отправкой просчитываются и добавляются в тело письма для каждой части архива вместе с аттачментом самой части(КС не путаются между кусками, это точно). Пробовал архивировать без сжатия, с gz и bzip2. Сжатие gz почему-то не прокатывает с mutt — по-тихому не отправляет письмо. Вопрос: где подвох? Всю голову сломал…
UPD: после написания поста и очередных тестов получил-таки бекап из двух кусков с нормальными КС. Ничего не понимаю…
#!/bin/bash
# make backup of site file sources
# and send it to admin email
# splitted to 19mb each part
shopt -s extglob # allow using of * patterns
TMPDIR="/tmp/site$$"
MD5FILE="/tmp/md5$$"
mkdir $TMPDIR
FULLTAR="$TMPDIR/site_dump_"`date '+%d%m%Y-%H%M%S'`".tar.bz2"
OUT="$TMPDIR/*__*"
tar -cjf $FULLTAR --exclude='awstats' --exclude '.filemanager' ~/http/; split -d -b 19m "$FULLTAR" $FULLTAR"__" ## add __ postfix to each part
ALLFILECNT=`find $TMPDIR -name "*__*" -type f | wc -l`
## ^^ all needed backup files contain __ underscores
CNT=0 # current file counter
for x in ${OUT}
do
let 'CNT=CNT+1'
md5sum "$x" > ${MD5FILE}
cat ${MD5FILE}
mutt -e "unmy_hdr from; my_hdr From: ADMIN@SITE.com.ua" -e "set realname=\"Crontab site sources backup\" " \
-s "SITE.com.ua tar $CNT/$ALLFILECNT `basename $x` " \
-a "$x" -- 'USERNAME@gmail.com' < ${MD5FILE}
done
rm -rf $TMPDIR
rm -f ${MD5FILE}