6 Commits
1.1 ... 1.2.3a

Author SHA1 Message Date
b15af7f22f Change description 2015-12-06 17:27:09 +01:00
4623d023b9 Fix minor issue
Now ownership of the log files is set to the user specified by the
-u option if that option is used
2015-12-06 17:16:31 +01:00
898ef3bcd9 Fix user option bug 2015-12-03 19:50:27 +01:00
a708ec80ca Add user option
Added a command line option to specify the user performing the backup.
This is useful if running the program with sudo.
2015-11-26 01:03:33 +01:00
f5365fddff Add warning in example configuration 2015-11-25 13:26:57 +01:00
473ee59868 Improve configuration file parsing
The configuration file is now parsed with a simple awk program
which is simpler to understand and maintain
2015-11-25 12:33:49 +01:00
2 changed files with 179 additions and 292 deletions

2
config
View File

@ -1,5 +1,7 @@
#Example config file for my_backup #Example config file for my_backup
# WARNING: Values should NOT be quoted, e.g. use inputs=/some/dir instead of inputs="/some/dir"
#Input directories. Use a comma to separate items #Input directories. Use a comma to separate items
inputs=/home/my_home,/etc inputs=/home/my_home,/etc

View File

@ -15,12 +15,11 @@
#You should have received a copy of the GNU General Public License #You should have received a copy of the GNU General Public License
#along with this program. If not, see <http://www.gnu.org/licenses/>. #along with this program. If not, see <http://www.gnu.org/licenses/>.
#Version 1.1
#Simple backup script. Reads options, sources and destination from a configuration file or standard input #Simple backup script. Reads options, sources and destination from a configuration file or standard input
#Help function #Help function
function help_function { function help_function {
echo "simple_backup, version 1.0.0" echo "simple_backup, version 1.2.3"
echo "" echo ""
echo "Usage: $0 [OPTIONS]" echo "Usage: $0 [OPTIONS]"
echo "" echo ""
@ -35,9 +34,13 @@ function help_function {
echo " the backup." echo " the backup."
echo "-k, --keep NUMBER Specify the number of old backups to keep." echo "-k, --keep NUMBER Specify the number of old backups to keep."
echo " Default: keep all." echo " Default: keep all."
echo "-u, --user USER User performing the backup."
echo " Default: current user."
echo " WARNING: This currently doesn't work with"
echo " other options!"
echo "" echo ""
echo "If no option is given, the program uses the default" echo "If no option is given, the program uses the default"
echo "configuration file: $HOME/.simple_backup/config." echo "configuration file: $HOMEDIR/.simple_backup/config."
echo "" echo ""
echo "Report bugs to dfucini@gmail.com" echo "Report bugs to dfucini@gmail.com"
exit 0 exit 0
@ -46,184 +49,95 @@ function help_function {
#Read configuration file #Read configuration file
function read_conf { function read_conf {
if [[ "$#" -eq 0 ]]; then if [[ "$#" -eq 0 ]]; then
CONFIG="$HOME/.simple_backup/config" CONFIG="$HOMEDIR/.simple_backup/config"
if [[ ! -f "$CONFIG" ]]; then
#If default config file doesn't exist, exit
echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Error: Configuration file not found" | tee $ERR
#If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
exit 1
fi
else else
CONFIG="$1" CONFIG="$1"
if [[ ! -f "$CONFIG" ]]; then if [[ ! -f "$CONFIG" ]]; then
#If the provided configuration file doesn't exist, exit #If the provided configuration file doesn't exist, exit
echo "$(date): Backup failed (see errors.log)" >> $HOME/.simple_backup/simple_backup.log echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Error: Configuration file not found" | tee -a $HOME/.simple_backup/errors.log echo "Error: Configuration file not found" | tee -a $ERR
#If libnotify is installed, show desktop notification that backup failed #If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed" ! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
rm -f $HOME/.simple_backup/simple_backup.log.old mv $ERR "$HOMEDIR/.simple_backup/errors.log"
fi mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then
rm -f $HOME/.simple_backup/errors.log.old
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
rm -f $HOME/.simple_backup/warnings.log.old
fi
exit 1 exit 1
fi fi
fi fi
while read line #Create temporary files
do INPUTS=$(mktemp)
#Ignore comments and empty lines EXCLUDE=$(mktemp)
if [[ $line == \#* || $line == "" ]]; then BACKUP=$(mktemp)
continue NKEEP=$(mktemp)
else
#Get option name and values for the current line
var=$(echo "$line" | cut -d"=" -f1)
case "$var" in #Parse the configuration file
#Files/folders to backup awk -v INPUTS="$INPUTS" -v EXCLUDE="$EXCLUDE" -v BACKUP="$BACKUP" \
inputs) -v NKEEP="$NKEEP" -v UHOME="$HOMEDIR/" -F '[=,]' \
#Create a temporary file to store inputs '$1=="inputs" { for ( i=2; i<=NF; i++ ) { sub(/^~\//,UHOME,$i); print $i > INPUTS } }
INPUTS=$(mktemp) $1=="backup_dir" { sub(/^~\//,UHOME,$2); print $2 > BACKUP }
tmp=$(echo "$line" | cut -d"=" -f2) $1=="exclude" { for ( i=2; i<=NF; i++ ) { sub(/^~\//,UHOME,$i); print $i > EXCLUDE } }
n=$(echo "$tmp" | awk -F ',' '{print NF}') #Files/folders must be separated with commas $1=="keep" { if ( $2 != NULL ) { print $2 > NKEEP } }' $CONFIG
i=1
#j=1
n_in=0
#Read each input and save it to the INPUTS file BACKUP_DEV=$(cat $BACKUP)
while [[ $i -le $n ]] KEEP=$(cat $NKEEP)
do
input=$(echo "$tmp" | cut -d"," -f$i) rm "$BACKUP"
input=$(echo "$input" | tr -d \"\') rm "$NKEEP"
if [[ "$input" =~ ^~/ ]]; then if [[ -z "$BACKUP_DEV" || ! -d "$BACKUP_DEV" ]]; then
input=$(echo ${input/\~/$HOME}) #If the backup directory is not set or doesn't exist, exit
fi echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Error: Output folder \"$BACKUP_DEV\" not found" | tee -a $ERR
#If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
if [[ ! -e "$input" ]]; then rm "$INPUTS"
#Warn the user if an input doesn't exist rm "$EXCLUDE"
echo "Warning: input \"$input\" not found. Skipping" | tee -a $HOME/.simple_backup/warning.log
else
n_in=$((n_in+1))
fi
echo "$input" >> $INPUTS exit 1
fi
i=$((i+1)) BACKUP_DIR=$BACKUP_DEV/simple_backup
done DATE=$(date +%Y-%m-%d-%H:%M)
;; #Create the backup subdirectory using date
if [[ ! -d "$BACKUP_DIR" ]]; then
mkdir -p "$BACKUP_DIR/$DATE"
else
#If previous backup(s) exist(s), save link to the last backup
LAST_BACKUP=$(readlink -f "$BACKUP_DIR/last_backup")
mkdir "$BACKUP_DIR/$DATE"
fi
#Directory where the backup is saved #Set the backup directory variable to the newly created subfolder
backup_dir) BACKUP_DIR="$BACKUP_DIR/$DATE"
BACKUP_DEV=$(echo "$line" | cut -d"=" -f2)
BACKUP_DEV=$(echo "$BACKUP_DEV" | tr -d \"\')
if [[ "$BACKUP_DEV" =~ ^~/ ]]; then
BACKUP_DEV=$(echo ${BACKUP_DEV/\~/$HOME})
fi
if [[ -z "$BACKUP_DEV" ]]; then
#If the backup directory is not set, exit
echo "$(date): Backup failed (see errors.log)" >> $HOME/.simple_backup/simple_backup.log
echo "Error: No backup folder set in configuration file" | tee -a $HOME/.simple_backup/errors.log
#If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then
rm -f $HOME/.simple_backup/simple_backup.log.old
fi
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then
rm -f $HOME/.simple_backup/errors.log.old
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
rm -f $HOME/.simple_backup/warnings.log.old
fi
exit 1
fi
if [[ ! -d "$BACKUP_DEV" ]]; then
#If the backup directory doesn't exist, exit
echo "$(date): Backup failed (see errors.log)" >> $HOME/.simple_backup/simple_backup.log
echo "Error: Output folder \"$BACKUP_DEV\" not found" | tee -a $HOME/.simple_backup/errors.log
#If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then
rm -f $HOME/.simple_backup/simple_backup.log.old
fi
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then
rm -f $HOME/.simple_backup/errors.log.old
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
rm -f $HOME/.simple_backup/warnings.log.old
fi
exit 1
fi
BACKUP_DIR=$BACKUP_DEV/simple_backup
DATE=$(date +%Y-%m-%d-%H:%M)
#Create the backup subdirectory using date
if [[ ! -d "$BACKUP_DIR" ]]; then
mkdir -p "$BACKUP_DIR/$DATE"
else
#If previous backup(s) exist(s), save link to the last backup
LAST_BACKUP=$(readlink -f "$BACKUP_DIR/last_backup")
mkdir "$BACKUP_DIR/$DATE"
fi
#Set the backup directory variable to the newly created subfolder
BACKUP_DIR="$BACKUP_DIR/$DATE"
;;
#Files/directories/patterns to exclude from backup
exclude)
#Create temp file to store exclude patterns
EXCLUDE=$(mktemp)
temp=$(echo "$line" | cut -d"=" -f2)
i=1
n=$(echo "$temp" | awk -F ',' '{print NF}') #Exclude patterns must be separated by commas
#Read each exclude pattern and save it in the temp file
while [[ $i -le $n ]]
do
var=$(echo "$temp" | cut -d"," -f$i)
var=$(echo "$var" | tr -d \"\')
if [[ "$var" =~ ^~/ ]]; then
var=$(echo ${var/\~/$HOME})
fi
echo "$var" >> $EXCLUDE
i=$((i+1))
done
;;
#Number of old backups to keep
keep)
KEEP=$(echo "$line" | cut -d"=" -f2)
;;
#Unrecognized options
*)
#Skip unrecognised options
echo "$(date): Warning: option \"$var\" not recognised. Skipping" >> $HOME/.simple_backup/warnings.log
;;
esac
fi
done<"$CONFIG"
n_in=$(cat $INPUTS | wc -l)
return return
} }
@ -231,6 +145,9 @@ function read_conf {
function parse_options { function parse_options {
i=1 i=1
n_in=0 n_in=0
#Create a temporary file to store inputs
INPUTS=$(mktemp)
#Create temp file to store exclude patterns #Create temp file to store exclude patterns
EXCLUDE=$(mktemp) EXCLUDE=$(mktemp)
@ -242,52 +159,36 @@ function parse_options {
-h | --help) -h | --help)
help_function help_function
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then rm $INPUTS
mv -f $HOME/.simple_backup/simple_backup.log.old $HOME/.simple_backup/simple_backup.log rm $EXCLUDE
fi
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then
mv -f $HOME/.simple_backup/errors.log.old $HOME/.simple_backup/errors.log
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
mv -f $HOME/.simple_backup/warnings.log.old $HOME/.simple_backup/warnings.log
fi
exit 0 exit 0
;; ;;
-i | --input) -i | --input)
#Create a temporary file to store inputs
INPUTS=$(mktemp)
while [[ "$#" -gt 1 && ! "$2" =~ ^- ]] while [[ "$#" -gt 1 && ! "$2" =~ ^- ]]
do do
input="$2" input="$2"
if [[ -z "$input" ]]; then if [[ -z "$input" ]]; then
echo "$(date): Backup failed (see errors.log)" >> $HOME/.simple_backup/simple_backup.log echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Error: bad options format" | tee -a $HOME/.simple_backup/errors.log echo "Error: bad options format" | tee -a $ERR
#If libnotify is installed, show desktop notification that backup failed #If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed" ! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
rm -f $HOME/.simple_backup/simple_backup.log.old mv $ERR "$HOMEDIR/.simple_backup/errors.log"
fi mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then rm $INPUTS
rm -f $HOME/.simple_backup/errors.log.old rm $EXCLUDE
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
rm -f $HOME/.simple_backup/warnings.log.old
fi
exit 1 exit 1
fi fi
if [[ ! -e "$input" ]]; then if [[ ! -e "$input" ]]; then
echo "Warning: input \"${INPUTS[$i]}\" not found. Skipping" | tee -a $HOME/.simple_backup/warnings.log echo "Warning: input \"${INPUTS[$i]}\" not found. Skipping" | tee -a $WARN
else else
i=$((i+1)) i=$((i+1))
n_in=$((n_in+1)) n_in=$((n_in+1))
@ -303,22 +204,17 @@ function parse_options {
BACKUP_DEV="$2" BACKUP_DEV="$2"
if [[ -z "$BACKUP_DEV" || ! -d "$BACKUP_DEV" ]]; then if [[ -z "$BACKUP_DEV" || ! -d "$BACKUP_DEV" ]]; then
echo "$(date): Backup failed (see errors.log)" >> $HOME/.simple_backup/simple_backup.log echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Error: output folder \"$BACKUP_DEV\" not found" | tee -a $HOME/.simple_backup/errors.log echo "Error: output folder \"$BACKUP_DEV\" not found" | tee -a $ERR
#If libnotify is installed, show desktop notification that backup failed #If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed" ! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
rm -f $HOME/.simple_backup/simple_backup.log.old mv $ERR "$HOMEDIR/.simple_backup/errors.log"
fi mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then rm $INPUTS
rm -f $HOME/.simple_backup/errors.log.old rm $EXCLUDES
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
rm -f $HOME/.simple_backup/warnings.log.old
fi
exit 1 exit 1
fi fi
@ -354,30 +250,58 @@ function parse_options {
;; ;;
-c | --config) -c | --config)
if [[ -f "$EXCLUDE" ]]; then
rm "$EXCLUDE" rm "$EXCLUDE"
fi rm "$INPUTS"
read_conf "$2" read_conf "$2"
return return
;; ;;
-u | --user)
rm "$EXCLUDE"
rm "$INPUTS"
if [[ ! -d "/home/$2" ]]; then
echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Error: user $2 doesn't exist" | tee -a $ERR
#If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
mv $LOG "HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "HOMEDIR/.simple_bakup/errors.log"
mv $WARN "HOMEDIR/.simple_backup/warnings.log"
exit 1
fi
if [[ ! -d "/home/$2/.simple_backup" ]]; then
mkdir "/home/$2/.simple_backup"
echo "Created directory \"$HOMEDIR/.simple_backup\"."
echo "Copy there sample configuration and edit it"
echo "to your needs before running the backup."
exit 1
fi
HOMEDIR="/home/$2"
config="/home/$2/.simple_backup/config"
USER="$2"
read_conf "$config"
return
;;
*) *)
echo "$(date): Backup failed (see errors.log)" >> $HOME/.simple_backup/simple_backup.log echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Error: Option $1 not recognised. Use 'simple-backup -h' to see available options" | tee -a $HOME/.simple_backup/errors.log echo "Error: Option $1 not recognised. Use 'simple-backup -h' to see available options" | tee -a $ERR
#If libnotify is installed, show desktop notification that backup failed #If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed" ! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
rm -f $HOME/.simple_backup/simple_backup.log.old mv $ERR "$HOMEDIR/.simple_backup/errors.log"
fi mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then
rm -f $HOME/.simple_backup/errors.log.old
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
rm -f $HOME/.simple_backup/warnings.log.old
fi
exit 1 exit 1
;; ;;
@ -389,83 +313,44 @@ function parse_options {
return return
} }
#Create HOME/.simple_backup if it doesn't exist #Create temporary log files
if [[ ! -d "$HOME/.simple_backup" ]]; then LOG=$(mktemp)
mkdir "$HOME/.simple_backup" ERR=$(mktemp)
fi WARN=$(mktemp)
HOMEDIR="$HOME"
#Check number of parameters #Check number of parameters
if [[ "$#" -lt 1 ]]; then if [[ "$#" -eq 0 ]]; then
#Read parameters from configuration file if [[ ! -d "$HOMEDIR/.simple_backup" ]]; then
default_config=1 mkdir "$HOMEDIR/.simple_backup"
else
default_config=0
fi
#Backup old log files echo "Created directory \"$HOMEDIR/.simple_backup\"."
if [[ -f $HOME/.simple_backup/simple_backup.log ]]; then echo "Copy there sample configuration and edit it"
mv -f $HOME/.simple_backup/simple_backup.log $HOME/.simple_backup/simple_backup.log.old echo "to your needs before running the backup."
fi
if [[ -f $HOME/.simple_backup/errors.log ]]; then exit 1
mv -f $HOME/.simple_backup/errors.log $HOME/.simple_backup/errors.log.old
fi
if [[ -f $HOME/.simple_backup/warnings.log ]]; then
mv -f $HOME/.simple_backup/warnings.log $HOME/.simple_backup/warnings.log.old
fi
#If no input parameter is given, check existence of config file
if [[ $default_config -eq 1 && ! -f $HOME/.simple_backup/config ]]; then
#If no config file and input parameter is given, exit
echo "$(date): Backup failed (see errors.log)" >> $HOME/.simple_backup/simple_backup.log
echo "Error: Configuration file not found" | tee $HOME/.simple_backup/errors.log
#If libnotify is installed, show desktop notification that backup failed
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup failed"
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then
rm -f $HOME/.simple_backup/simple_backup.log.old
fi fi
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then
rm -f $HOME/.simple_backup/errors.log.old
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
rm -f $HOME/.simple_backup/warnings.log.old
fi
exit 1
elif [[ $default_config -eq 1 && -f $HOME/.simple_backup/config ]]; then
#Read configuration file
read_conf read_conf
else else
#Parse command line arguments parse_options $@
parse_options "$@"
fi fi
if [[ -z $n_in || $n_in -eq 0 ]]; then if [[ -z $n_in || $n_in -eq 0 ]]; then
echo "$(date): Backup finished (no files copied)" >> $HOME/.simple_backup/simple_backup.log echo "$(date): Backup finished (no files copied)" >> $LOG
echo "Warning: no valid input selected. Nothing to do" | tee -a $HOME/.simple_backup/warnings.log echo "Warning: no valid input selected. Nothing to do" | tee -a $WARN
#If libnotify is installed, show desktop notification that backup finished #If libnotify is installed, show desktop notification that backup finished
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup finished (warnings)" ! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup finished (warnings)"
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
rm -f $HOME/.simple_backup/simple_backup.log.old mv $ERR "$HOMEDIR/.simple_backup/errors.log"
fi mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then
rm -f $HOME/.simple_backup/errors.log.old
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
rm -f $HOME/.simple_backup/warnings.log.old
fi
exit 0 exit 0
fi fi
echo "$(date): Starting backup" > $HOME/.simple_backup/simple_backup.log echo "$(date): Starting backup" > $LOG
#If libnotify is installed, show desktop notification that backup is starting #If libnotify is installed, show desktop notification that backup is starting
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Starting backup" ! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Starting backup"
@ -475,14 +360,14 @@ if [[ -n $KEEP ]]; then
N_BACKUP=$(($N_BACKUP-1)) N_BACKUP=$(($N_BACKUP-1))
if [[ $N_BACKUP -gt $KEEP ]]; then if [[ $N_BACKUP -gt $KEEP ]]; then
echo "$(date): Removing old backups..." >> $HOME/.simple_backup/simple_backup.log echo "$(date): Removing old backups..." >> $LOG
REMOVE=$(mktemp) REMOVE=$(mktemp)
find $BACKUP_DEV/simple_backup/* -maxdepth 0 -type d | sort | head -n $(($N_BACKUP - $KEEP)) >> $REMOVE find $BACKUP_DEV/simple_backup/* -maxdepth 0 -type d | sort | head -n $(($N_BACKUP - $KEEP)) >> $REMOVE
while read line while read line
do do
rm -r $line rm -r $line
echo "Removed backup: $line" >> $HOME/.simple_backup/simple_backup.log echo "Removed backup: $line" >> $LOG
done<$REMOVE done<$REMOVE
rm $REMOVE rm $REMOVE
@ -496,23 +381,35 @@ if [[ ! -z "$INPUTS" ]]; then
fi fi
if [[ -z "$LAST_BACKUP" ]]; then if [[ -z "$LAST_BACKUP" ]]; then
rsync -acrv -H -X -R --exclude-from="$EXCLUDE" --files-from="$INPUTS" / "$BACKUP_DIR" >> "$HOME/.simple_backup/simple_backup.log" 2>> "$HOME/.simple_backup/errors.log" rsync -acrv -H -X -R --exclude-from="$EXCLUDE" --files-from="$INPUTS" / "$BACKUP_DIR" --ignore-missing-args >> $LOG 2>> $ERR
else else
rsync -acrv -H -X -R --link-dest="$LAST_BACKUP" --exclude-from="$EXCLUDE" --files-from="$INPUTS" / "$BACKUP_DIR" >> "$HOME/.simple_backup/simple_backup.log" 2>> "$HOME/.simple_backup/errors.log" rsync -acrv -H -X -R --link-dest="$LAST_BACKUP" --exclude-from="$EXCLUDE" --files-from="$INPUTS" / "$BACKUP_DIR" --ignore-missing-args >> $LOG 2>> $ERR
fi fi
#Update the logs #Update the logs
if [[ -f $HOME/.simple_backup/errors.log && $(cat $HOME/.simple_backup/errors.log | wc -l) -gt 0 ]]; then if [[ $(cat $ERR | wc -l) -gt 0 ]]; then
echo "$(date): Backup finished with errors" >> $HOME/.simple_backup/simple_backup.log echo "$(date): Backup finished with errors" >> $LOG
error_flag=1 error_flag=1
elif [[ -f $HOME/.simple_backup/warnings.log && $(cat $HOME/.simple_backup/warnings.log | wc -l) -gt 0 ]]; then elif [[ $(cat $WARN | wc -l) -gt 0 ]]; then
echo "$(date): Backup finished with warnings" >> $HOME/.simple_backup/simple_backup.log echo "$(date): Backup finished with warnings" >> $LOG
error_flag=2 error_flag=2
else else
echo "$(date): Backup finished" >> $HOME/.simple_backup/simple_backup.log echo "$(date): Backup finished" >> $LOG
error_flag=0 error_flag=0
fi fi
#Fix ownership and permissions of log files if needed
if [[ ! -z $USER ]]; then
chown $USER:$USER $LOG && chmod 644 $LOG
chown $USER:$USER $ERR && chmod 644 $ERR
chown $USER:$USER $WARN && chmod 644 $WARN
fi
#Copy log files in home directory
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
if [[ ! -z "$EXCLUDE" ]]; then if [[ ! -z "$EXCLUDE" ]]; then
rm "$EXCLUDE" rm "$EXCLUDE"
fi fi
@ -536,16 +433,4 @@ else
! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup finished (warnings)" ! command -v notify-send > /dev/null 2>&1 || DISPLAY=:0.0 notify-send -u low -t 10000 "Backup finished (warnings)"
fi fi
if [[ -f $HOME/.simple_backup/simple_backup.log.old ]]; then
rm -f $HOME/.simple_backup/simple_backup.log.old
fi
if [[ -f $HOME/.simple_backup/errors.log.old ]]; then
rm -f $HOME/.simple_backup/errors.log.old
fi
if [[ -f $HOME/.simple_backup/warnings.log.old ]]; then
rm -f $HOME/.simple_backup/warnings.log.old
fi
exit 0 exit 0