#!/bin/bash SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) cd $SCRIPT_DIR . ./backup.config function log() { echo -e "\e[96m`date +'%d/%m/%Y %H:%M:%S'` \e[39m| $1" echo -e "`date +'%d/%m/%Y %H:%M:%S'` | $1" >> $LOG } function usage() { echo echo -e "./backup.sh \e[93m--help \e[39m" echo -e "./backup.sh \e[93m--mount \e[39m" echo -e "./backup.sh \e[93m--umount \e[39m" echo -e "./backup.sh \e[92m--src=\e[39m/mnt/data \e[96m--dst=\e[39m/backup" echo -e "./backup.sh \e[92m--src=\e[39m/mnt/vmachines/storage \e[96m--dst=\e[39m/backup/data/VMachines" echo -e "./backup.sh \e[92m--src=\e[39m/mnt/projects \e[96m--dst=\e[39m/backup \e[91m--delete=\e[39myes" echo echo -e " $1" echo exit } function mount_usb() { mount_luks $LUKS_PASS $USB_PARTITION if [ $? = 0 ]; then log "[ OK ] $USB_PARTITION decrypted" /usr/bin/mount /dev/mapper/crypted_usb /mnt/usb if [ $? = 0 ]; then log "[ OK ] $USB_PARTITION mounted" return 0 else log "[FAIL] $USB_PARTITION mounted" return 1 fi else log "[FAIL] $USB_PARTITION decrypted" return 1 fi exit } function umount_usb() { if /usr/bin/umount $USB_MOUNT; then if [ $? = 0 ]; then log "[ OK ] umount usb disk" luks_close if [ $? = 0 ]; then log "[ OK ] close disk encryption" return 0 else log "[FAIL] close disk encryption" return 1 fi else log "[FAIL] umount usb disk" fi else log "[FAIL] to find mounted usb disk" fi } function mount() { if find_usb; then if get_luks_password; then mount_usb fi fi exit } function umount() { umount_usb exit } function send_mail() { COPIED=$( cat ${LOG} | grep "Number of created files:" | awk {'print $5'} ) DELETED=$( cat ${LOG} | grep "Number of deleted files:" | awk {'print $5'} ) TRANSFERRED=$( cat ${LOG} | grep "Number of regular files transferred:" | awk {'print $6'} ) SUBJECT="${COPIED} files copied, ${DELETED} files deleted, ${TRANSFERRED} files transferred" echo "Backup Report" | mutt -s $SUBJECT -F /etc/muttrc $MAIL_RECIPIENT -a $LOG } function main () { rm $LOG -rf log "" log "SOURCE : $SRC" log "DESTINATION : $USB_MOUNT$DST" log "WITH DELETE : ${DELETE:-"No (default)"}" log "" if get_luks_password; then if find_usb; then if mount_usb; then sync_files fi statistics_usb umount_usb send_mail fi fi } for i in "$@" do case $i in --help) usage ;; --mount) mount ;; --umount) umount ;; --src=*) SRC="${i#*=}" shift ;; --dst=*) DST="${i#*=}" shift ;; --delete=*) DELETE="${i#*=}" shift ;; *) usage ;; esac done [ -z "$SRC" ] && usage "option \e[92m'--src'\e[39m is missing" [ -z "$DST" ] && usage "option \e[92m'--dst'\e[39m is missing" main