backup-script/backup.sh

118 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# Interactive backup script written by Skylar Grant
#
# GitHub: https://github.com/voidf1sh/backup-script
# File: backup.sh
# Version: 0.0.1
# Date: 2021.09.21
####################################################
####################################################
# Formatting Tips:
# (Tips found at : https://misc.flogisoft.com/bash/tip_colors_and_formatting)
#
# Formatting:
# \e[1m - Bold
# \e[2m - Dim
# \e[8m - Hidden (passwords)
#
# Reset:
# \e[0m - Reset All Attributes
# \e[21m - Reset Bold/Bright
# \e[22m - Reset Dim
# \e[28m - Reset Hidden
#
# Colors:
# \e[39m - Default Foreground Color
# \e[30m - Black
# \e[31m - Red
# \e[32m - Green
# \e[34m - Blue
####################################################
# Some initial variables to work with
# Note: this isn't ideal, this is going to name the
# backup according to the time the script is launched
# not according to the time the actual backup was initiated
if [[ -f "./.dir" ]]; then
backupdir=$(cat ./.dir)
else
backupdir="$(pwd)/backups"
fi
timestamp=$(date "+%Y%m%d_%H%M")
filename="backup_$timestamp.tar.gz"
# Initial Prompt
# Bash allows for linebreaks in string literals and will
# break lines accordingly in the shell
echo -e "
\e[1m\e[32m[ Skylar's Backup Script ]\e[0m
\e[32mThis script is being run from: \e[0m'$(pwd)'
\e[32mCurrent Backup Location: \e[0m'$backupdir'
\e[32mDirectories to Backup: \e[0m '$HOME'
\e[34mPlease enter an option from below:\e[0m
\e[34m[1] \e[0mCreate a new backup.
\e[34m[2] \e[0mList saved backups.
\e[34m[3] \e[0mChange backup directory.
\e[34m[4] \e[0mINOPERABLE/Coming Soon - Generate a reusable backup script using these settings.
\e[34m[0] \e[31mExit\e[0m
"
if ! test -d "$backupdir"; then
echo -e "\e[31mError: The backup directory does not exist.
\e[0mWould you like to create it? [y/n]"
read -p "[y/n]: " yesno
case "$yesno" in
"y")
mkdir -p "$backupdir"
;;
"n")
;;
esac
fi
# Wait for input
read -p " Option: " opt
# Execute the correct commands based on input.
case "$opt" in
1)
# Create new backup
clear
tar -czvf "/tmp/$filename" $HOME
mv "/tmp/$filename" "$backupdir"
clear
echo "Your backup is complete and can be found at $backupdir/$filename"
;;
2)
# List saved backups
clear
ls -al "$backupdir" | grep "backup"
;;
3)
# Change backup directory
read -p " New directory: " newdir
echo $newdir > ./.dir
;;
0)
# Exit the script
echo "!! Quitting !!"
sleep 0.4s
clear
exit
;;
*)
clear
echo "!! Invalid Option !!"
;;
esac
exec ./backup.sh