Add backup2me.sh

This commit is contained in:
Alice Gaudon 2019-05-22 06:40:08 +02:00
parent 0bb0133513
commit fe1b5584c4
2 changed files with 69 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.lock

68
backup2me.sh Executable file
View File

@ -0,0 +1,68 @@
#!/bin/bash
function join {
local d=$1;
shift;
local p=$1;
shift;
echo -n "$p$1";
shift;
printf "%s" "${@/#/$d$p}";
}
lockfile-create -p -r 2 $0 || (echo "Another backup is running, aborting" & exit 1)
### Program arguments ###
# Backup target directory
BACKUP_TARGET=$1
# Backup local directory
BACKUP_DIRECTORY=$2
# Exclusions
BACKUP_EXCLUSIONS=$(join " " "--exclude=" $3)
echo "Exclusions: $BACKUP_EXCLUSIONS"
# Script executed before starting the backup
BEFORE_SCRIPT=$4
# Script executed after finishing the backup
AFTER_SCRIPT=$5
# Backup root path, change it to create a new backup
BACKUP_ROOT=$6
# Backup archive path, change it for each backup
BACKUP_ARCHIVE=$7
### Backup automatic properties ###
BACKUP_ROOT_PATH="$(cat /etc/hostname)"
BACKUP_BASE_PATH="$BACKUP_ROOT_PATH/$BACKUP_ROOT"
BACKUP_CONTENTS_PATH="$BACKUP_BASE_PATH/_backup/"
BACKUP_ARCHIVE_PATH="$BACKUP_BASE_PATH/$BACKUP_ARCHIVE"
echo "Starting backup"
### Before Script ###
eval "$BEFORE_SCRIPT"
### Create local model of the remote's backup directory tree and send it ###
mkdir -p "$BACKUP_CONTENTS_PATH"
rsync --timeout=30 -avzhP --relative "$BACKUP_CONTENTS_PATH" "$BACKUP_TARGET"
### Backup home directory except some unwanted files ###
rsync --timeout=30 -avzhP --delete --inplace $BACKUP_EXCLUSIONS --backup-dir="../$BACKUP_ARCHIVE_PATH" "$BACKUP_DIRECTORY" "$BACKUP_TARGET/$BACKUP_CONTENTS_PATH"
### Remove local model of the backup directory tree ###
rm -R "$BACKUP_ROOT_PATH"
### After Script ###
eval "$AFTER_SCRIPT"
# Remove lock
echo "Backup finished. Removing lock..."
lockfile-remove $0