feat(backup) add backup app
This commit is contained in:
commit
f6848cd47b
1
.backup.lst
Normal file
1
.backup.lst
Normal file
@ -0,0 +1 @@
|
|||||||
|
/home/zduno/Code/studia/ZSOP/weather
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.env
|
102
backup.sh
Normal file
102
backup.sh
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
BACKUP_LIST="$(readlink -e ~/)/.backup.lst"
|
||||||
|
|
||||||
|
if [ -n "$BACKUP_LIST" ]
|
||||||
|
then
|
||||||
|
touch $BACKUP_LIST
|
||||||
|
fi
|
||||||
|
|
||||||
|
add() {
|
||||||
|
local add_to_backup=$(readlink -m "$OPTARG")
|
||||||
|
touch $BACKUP_LIST || exit
|
||||||
|
|
||||||
|
if ! grep -Fxq $add_to_backup $BACKUP_LIST
|
||||||
|
then
|
||||||
|
echo $add_to_backup >> $BACKUP_LIST
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
remove() {
|
||||||
|
grep -v $(readlink -m "$OPTARG") $BACKUP_LIST > remove; mv remove $BACKUP_LIST
|
||||||
|
find $BACKUP_LIST -size 0 -delete
|
||||||
|
}
|
||||||
|
|
||||||
|
backup() {
|
||||||
|
local current_time=`date '+%Y-%m-%d-%H-%M-%S'`
|
||||||
|
local latest_backup_date="$(readlink -e ~/)/.latest_backup_date"
|
||||||
|
local rsync_path="mkdir -p $REMOTE_OR_LOCAL_DEST && rsync"
|
||||||
|
|
||||||
|
if [ -n "$1" ] && [ -s "$latest_backup_date" ]
|
||||||
|
then
|
||||||
|
local latest_backup="$BACKUP_PATH/$(cat $latest_backup_date)"
|
||||||
|
rsync -Rrtu / --rsync-path="$rsync_path" --compare-dest="$latest_backup" --files-from="$BACKUP_LIST" "$BACKUP_PATH/$current_time"
|
||||||
|
else
|
||||||
|
rsync -Rrt / --rsync-path="$rsync_path" --files-from="$BACKUP_LIST" "$BACKUP_PATH/$current_time"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$current_time" > "$latest_backup_date"
|
||||||
|
}
|
||||||
|
|
||||||
|
do_backup() {
|
||||||
|
if [ -n "$DO_UPDATED_BACKUP" ]
|
||||||
|
then
|
||||||
|
backup true
|
||||||
|
else
|
||||||
|
backup
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
help() {
|
||||||
|
local AUTHOR=$'Author: \u2605 Patryk Zdunowski\u2605'
|
||||||
|
local DESC="Description: Simple script for backup your data."
|
||||||
|
local OPTIONS="
|
||||||
|
* -a - add new file to defined backup list
|
||||||
|
* -r - remove file from defined list
|
||||||
|
* -b - send defined files to remote server / local folder
|
||||||
|
* -u - update defined files which has differences against latest created backup
|
||||||
|
* -h - help
|
||||||
|
"
|
||||||
|
echo "$AUTHOR"
|
||||||
|
echo $DESC
|
||||||
|
printf "$OPTIONS"
|
||||||
|
|
||||||
|
}
|
||||||
|
while getopts "a:r:b:uh" opt; do
|
||||||
|
case $opt in
|
||||||
|
a)
|
||||||
|
add
|
||||||
|
;;
|
||||||
|
r)
|
||||||
|
remove
|
||||||
|
;;
|
||||||
|
b)
|
||||||
|
#check if backup path from remote server (bad but only for student project)
|
||||||
|
if [[ $OPTARG == *[:]* ]]
|
||||||
|
then
|
||||||
|
BACKUP_PATH=$OPTARG
|
||||||
|
REMOTE_OR_LOCAL_DEST=$(echo $OPTARG | cut -f2 -d:)
|
||||||
|
|
||||||
|
else
|
||||||
|
BACKUP_PATH=$(readlink -m "$OPTARG")
|
||||||
|
REMOTE_OR_LOCAL_DEST=$BACKUP_PATH
|
||||||
|
mkdir -p $REMOTE_OR_LOCAL_DEST
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
u)
|
||||||
|
DO_UPDATED_BACKUP=true
|
||||||
|
;;
|
||||||
|
h)
|
||||||
|
SHOW_HELP=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$BACKUP_PATH" ]
|
||||||
|
then
|
||||||
|
do_backup
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$SHOW_HELP" ]
|
||||||
|
then
|
||||||
|
help
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user