#!/bin/bash ABSOLUTE_FILENAME=`readlink -e "$0"` DIRECTORY=`dirname "$ABSOLUTE_FILENAME"` source ${DIRECTORY}/config stamp=`date +%s`-`date +"%Y%m%d-%H%M%S-I"` do_full="" do_quet=0 while getopts "fq" opt; do case $opt in f) do_full=1;; q) do_quet=1;; # -f -full # -q -quet (no verbose output) esac done if [ -n "${do_full}" ] then if [ "${do_quet}" == 0 ] then echo "Full backup started" fi stamp=`date +%s`-`date +"%Y%m%d-%H%M%S-F"` rm -f ${prefix}/incremental/* fi if [ ! -d "${prefix}/incremental" ]; then # Создать папку, только если ее не было mkdir ${prefix}/incremental fi if [ ! -d "${prefix}/compressed" ]; then # Создать папку, только если ее не было mkdir ${prefix}/compressed fi mkdir ${prefix}/${stamp} # SQL DB Backup for sql_item in ${sql_list} do if [ "${do_quet}" == 0 ] then echo -n "Collecting database ${sql_item//:/ }...." fi #${sqldump_prefix} ${sql_item//:/ } | gzip > ${prefix}/${stamp}/${sql_item//:/.}.sql.gz if [[ -f "${prefix}/incremental/${sql_item//:/.}.sql.sign" ]] then xsuffix=".diff" ${sqldump_prefix} ${sql_item//:/ } | rdiff delta ${prefix}/incremental/${sql_item//:/.}.sql.sign > ${prefix}/${stamp}/${sql_item//:/.}.sql.delta else ${sqldump_prefix} ${sql_item//:/ } | cat > ${prefix}/${stamp}/${sql_item//:/.}.sql rdiff signature ${prefix}/${stamp}/${sql_item//:/.}.sql > ${prefix}/incremental/${sql_item//:/.}.sql.sign fi if [ "${do_quet}" == 0 ] then echo "OK" fi done #Archiving SQL for DIFF #Files Full Backup for file_item in ${files_list} do xfolder=`echo ${file_item} | awk -F : '{ print $1 }'` if [[ -n "`echo ${file_item} | awk -F : '{ print $2 }'`" ]] then xsubfolders=`echo ${file_item} | sed -e 's/^[^:]*://'` else xsubfolders="*" fi if [ "${do_quet}" == 0 ] then echo -n "Collecting folder ${xfolder}...." fi if [[ -f "${prefix}/incremental/${xfolder////_}.snar" ]] then cp ${prefix}/incremental/${xfolder////_}.snar ${prefix}/incremental/${xfolder////_}.snar.diff xsuffix=".diff" else xsuffix="" fi cd ${xfolder} && tar -c --listed-incremental=${prefix}/incremental/${xfolder////_}.snar${xsuffix} -f ${prefix}/${stamp}/${xfolder////_}${xsuffix}.tar ${xsubfolders//:/ } rm -f ${prefix}/incremental/${xfolder////_}.snar.diff if [ "${do_quet}" == 0 ] then echo "OK" fi done # Compressing if [ "${do_quet}" == 0 ] then echo "Compressing" fi find ${prefix}/${stamp} -maxdepth 1 -type f -not -name "*.gz" -exec gzip {} \; # Encrypting if [ -n "${gpg_passphrase}" ] then if [ "${do_quet}" == 0 ] then echo "Encrypting" fi find ${prefix}/${stamp} -maxdepth 1 -type f -exec bash -c "echo \"${gpg_passphrase}\" | gpg --batch --passphrase-fd 0 --symmetric \"{}\" && rm -f \"{}\"" \; fi if [ "${do_quet}" == 0 ] then echo "Packing" fi # Packing cd ${prefix}/${stamp} && tar -cf ${prefix}/compressed/${stamp}.tar * rm -f $prefix/$stamp/* rmdir $prefix/$stamp # Sending data if [ -n "${sshhost}" ] then for xfile_item in `ls ${prefix}/compressed` do if [ "${do_quet}" == 0 ] then echo "Sending via SSH $xfile_item" fi scp -B -P ${sshport} -i ${sshkey} ${prefix}/compressed/${xfile_item} ${sshuser}@${sshhost}:${sshpath} > /dev/null if [ "$?" == 0 ] then rm -f ${prefix}/compressed/${xfile_item} fi done fi