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