1 Commits
1.4.2 ... 1.3.2

Author SHA1 Message Date
204b73ddcd Fix minor bugs 2017-06-17 15:06:57 +02:00

View File

@ -1,6 +1,6 @@
#!/bin/bash
#Copyright 2017 Daniele Fucini <dfucini@gmail.com>
#Copyright 2015 Daniele Fucini <dfucini@gmail.com>
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
@ -19,7 +19,7 @@
#Help function
function help_function {
echo "simple_backup, version 1.4.1"
echo "simple_backup, version 1.3.1"
echo ""
echo "Usage: $0 [OPTIONS]"
echo ""
@ -36,8 +36,8 @@ function help_function {
echo " Default: keep all."
echo "-u, --user USER User performing the backup."
echo " Default: current user."
echo "-s, --checksum Use the checksum rsync option to compare files"
echo " (MUCH slower)."
echo " WARNING: This currently doesn't work with"
echo " other options!"
echo ""
echo "If no option is given, the program uses the default"
echo "configuration file: $HOMEDIR/.simple_backup/config."
@ -57,13 +57,6 @@ function read_conf {
echo "Backup failed"
echo "Error: Configuration file not found" | tee $ERR
#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
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
@ -79,14 +72,6 @@ function read_conf {
echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Backup failed"
echo "Error: Configuration file not found" | tee -a $ERR
#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
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
@ -122,13 +107,6 @@ function read_conf {
echo "Backup failed"
echo "Error: Output folder \"$BACKUP_DEV\" not found" | tee -a $ERR
#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
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
@ -146,7 +124,7 @@ function read_conf {
if [[ ! -d "$BACKUP_DIR" ]]; then
mkdir -p "$BACKUP_DIR/$DATE"
else
#If previous backups exist, save link to the last backup
#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
@ -161,6 +139,7 @@ function read_conf {
#Parse options
function parse_options {
i=1
n_in=0
#Create a temporary file to store inputs
@ -188,9 +167,25 @@ function parse_options {
do
input="$2"
if [[ -z "$input" ]]; then
echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Backup failed"
echo "Error: bad options format" | tee -a $ERR
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
rm $INPUTS
rm $EXCLUDE
exit 1
fi
if [[ ! -e "$input" ]]; then
echo "Warning: input \"$input\" not found. Skipping" | tee -a $WARN
echo "Warning: input \"${INPUTS[$i]}\" not found. Skipping" | tee -a $WARN
else
i=$((i+1))
n_in=$((n_in+1))
echo "$input" >> "$INPUTS"
fi
@ -208,19 +203,12 @@ function parse_options {
echo "Backup failed"
echo "Error: output folder \"$BACKUP_DEV\" not found" | tee -a $ERR
#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
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
rm $INPUTS
rm $EXCLUDE
rm $EXCLUDES
exit 1
fi
@ -264,43 +252,42 @@ function parse_options {
;;
-u | --user)
if [[ ! -d "/home/$2" ]]; then
echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Backup failed"
echo "Error: user $2 doesn't exist" | tee -a $ERR
rm "$EXCLUDE"
rm "$INPUTS"
if [[ ! -d "$HOMEDIR/.simple_backup" ]]; then
mkdir "$HOMEDIR/.simple_backup"
if [[ ! -d "/home/$2" ]]; then
echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Backup failed"
echo "Error: user $2 doesn't exist" | tee -a $ERR
if [[ ! -d "$HOMEDIR/.simple_backup" ]]; then
mkdir "$HOMEDIR/.simple_backup"
fi
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
#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
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
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
HOMEDIR="/home/$2"
CONFIG="/home/$2/.simple_backup/config"
USER="$2"
exit 1
fi
read_conf "$config"
if [[ ! -d "/home/$2/.simple_backup" ]]; then
mkdir "/home/$2/.simple_backup"
echo "Created directory \"$HOMEDIR/.simple_backup\"."
fi
HOMEDIR="/home/$2"
USER="$2"
shift
;;
-s | --checksum)
OPTIONS="-arcvh -H -X -R"
return
;;
*)
@ -308,13 +295,6 @@ function parse_options {
echo "Backup failed"
echo "Error: Option $1 not recognised. Use 'simple-backup -h' to see available options" | tee -a $ERR
#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
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
@ -335,7 +315,6 @@ ERR=$(mktemp)
WARN=$(mktemp)
HOMEDIR="$HOME"
OPTIONS="-arvh -H -X -R"
#Check number of parameters
if [[ "$#" -eq 0 ]]; then
@ -344,62 +323,21 @@ if [[ "$#" -eq 0 ]]; then
echo "Created directory \"$HOMEDIR/.simple_backup\"."
echo "Copy there sample configuration and edit it"
echo "to your needs before running the backup,"
echo "or pass options on the command line."
echo "to your needs before running the backup."
exit 1
fi
read_conf
else
parse_options "$@"
if [[ $n_in -gt 0 && ( -z $BACKUP_DIR || ! -d $BACKUP_DIR ) ]]; then
#If the backup directory is not set or doesn't exist, exit
echo "$(date): Backup failed (see errors.log)" >> $LOG
echo "Backup failed"
echo "Error: Output folder \"$BACKUP_DEV\" not found" | tee -a $ERR
#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
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
exit 1
elif [[ $n_in -eq 0 && -z $BACKUP_DIR ]]; then
if [[ ! -d "$HOMEDIR/.simple_backup" ]]; then
mkdir "$HOMEDIR/.simple_backup"
echo "Created directory \"$HOMEDIR/.simple_backup\"."
echo "Copy there sample configuration and edit it"
echo "to your needs before running the backup,"
echo "or pass options on the command line."
exit 1
fi
read_conf $HOMEDIR/.simple_backup/config
fi
parse_options $@
fi
if [[ $n_in -eq 0 ]]; then
if [[ -z $n_in || $n_in -eq 0 ]]; then
echo "$(date): Backup finished (no files copied)" >> $LOG
echo "Backup finished"
echo "Warning: no valid input selected. Nothing to do" | tee -a $WARN
#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
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
@ -442,9 +380,9 @@ fi
echo "Copying files. This may take a long time..."
if [[ -z "$LAST_BACKUP" ]]; then
rsync $OPTIONS --exclude-from="$EXCLUDE" --files-from="$INPUTS" / "$BACKUP_DIR" --ignore-missing-args >> $LOG 2>> $ERR
rsync -acrv -H -X -R --exclude-from="$EXCLUDE" --files-from="$INPUTS" / "$BACKUP_DIR" --ignore-missing-args >> $LOG 2>> $ERR
else
rsync $OPTIONS --link-dest="$LAST_BACKUP" --exclude-from="$EXCLUDE" --files-from="$INPUTS" / "$BACKUP_DIR" --ignore-missing-args >> $LOG 2>> $ERR
rsync -acrv -H -X -R --link-dest="$LAST_BACKUP" --exclude-from="$EXCLUDE" --files-from="$INPUTS" / "$BACKUP_DIR" --ignore-missing-args >> $LOG 2>> $ERR
fi
#Update the logs