mirror of https://github.com/Chizi123/Scripts.git

Joel Grunbaum
2021-08-24 d6e801a44971f9e6ee6d1282b3ae0912e0033ba3
backup.sh
@@ -1,29 +1,80 @@
#!/bin/sh
cd /home/joel/OneDrive
LAST="$(duplicacy list | tail -n1 | cut -d' '  -f4)"
CURR="$(duplicacy backup | grep "revision [0-9] completed" | sed 's/[^0-9]//g')"
#LAST=2
#CURR=4
DIFF="$(duplicacy diff -r $CURR -r $LAST | grep '-')"
#echo "curr - $CURR"
#echo "last - $LAST"
#echo "diff - $DIFF"
if [ -z "$DIFF" ]; then
   duplicacy prune -r $CURR -exclusive
else
   echo "No diff to backup"
fi
duplicacy prune -keep 1:7 -keep 7:30 -exclusive
BACKUP_DIR="/backup/work/"
rclone sync $BACKUP_DIR "OneDrive_Personal":/Uni &
rclone sync $BACKUP_DIR "NextCloud":/Uni &
rclone sync $BACKUP_DIR "GoogleDrive":/Uni &
rclone sync $BACKUP_DIR "Mega":/Uni &
rclone sync $BACKUP_DIR "unimelb":/ &
rclone sync $BACKUP_DIR "sout":/data/Cloud &
#rclone sync $BACKUP_DIR "Oracle":/Uni
FILES_DIR="/home/joel/OneDrive/"
RCLONE_BACKUP=("GoogleDrive" "Mega" "unimelb" "pCloud" "gdrive_unimelb")
RCLONE_FILES=("Mega" "unimelb" "gdrive_unimelb")
EXCLUDES="/home/joel/Scripts/backup_patterns.txt"
function sync() {
    case $1 in
   "sout")
       rclone sync $([ $2 != "p" ] && echo "$BACKUP_DIR" || echo "$FILES_DIR") \
         $1:/data/Cloud/$([ $2 != "p" ] && echo "backup" || echo "files") $(! [ -z $3 ] && echo "-P")
       ;;
   *)
       rclone sync $([ $2 != "p" ] && echo "$BACKUP_DIR" || echo "$FILES_DIR") \
         $1:/Uni/$([ $2 != "p" ] && echo "borg" || echo "files")  $(! [ -z $3 ] && echo "-P")
       ;;
    esac
}
function sync_all() {
    if [ -z $1 ]; then
   for i in ${RCLONE_BACKUP[*]}; do
       #echo -e '\033[0;31m'$i backup'\033[0m'
       sync $i n &
   done
   for i in ${RCLONE_FILES[*]}; do
       #echo -e '\033[0;31m'$i files'\033[0m'
       sync $i p &
   done
    else
   for i in ${RCLONE_BACKUP[*]}; do
       echo -e '\033[0;31m'$i backup'\033[0m'
       sync $i n p
   done
   for i in ${RCLONE_FILES[*]}; do
       echo -e '\033[0;31m'$i files'\033[0m'
       sync $i p p
   done
    fi
}
if [ "$1" = "sync" ]; then
    echo -e '\033[0;32m'Syncing'\033[0m'
    sync_all p
    exit
elif [ "$1" = "cron" ]; then
    borg create \
    --compression zstd,22 \
    --exclude-from $EXCLUDES \
    \
    $BACKUP_DIR::"$(date +%F+%R)" \
    $FILES_DIR
else
    borg create \
    --verbose \
    --stats \
    --compression zstd,22 \
    --exclude-from $EXCLUDES \
    \
    $BACKUP_DIR::"$(date +%F+%R)" \
    $FILES_DIR
fi
borg prune \
     --keep-hourly 12 \
     --keep-daily 8 \
     --keep-monthly 2 \
     $BACKUP_DIR
LAST="$(borg list $BACKUP_DIR | tail -n2 | cut -d' ' -f1)"
TOP="$(echo $LAST | cut -d' ' -f1)"
BOTTOM="$(echo $LAST | cut -d' ' -f2)"
if [ -z "$(borg diff $BACKUP_DIR::$TOP $BOTTOM)" ]; then
    borg delete $BACKUP_DIR::$(echo $LAST | cut -d' ' -f2)
else
    echo "New backup $(echo $LAST | cut -d' ' -f2)"
    sync_all
fi