Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
204b73ddcd |
180
simple-backup
180
simple-backup
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/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
|
#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
|
#it under the terms of the GNU General Public License as published by
|
||||||
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
#Help function
|
#Help function
|
||||||
function help_function {
|
function help_function {
|
||||||
echo "simple_backup, version 1.4.1"
|
echo "simple_backup, version 1.3.1"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Usage: $0 [OPTIONS]"
|
echo "Usage: $0 [OPTIONS]"
|
||||||
echo ""
|
echo ""
|
||||||
@ -36,8 +36,8 @@ function help_function {
|
|||||||
echo " Default: keep all."
|
echo " Default: keep all."
|
||||||
echo "-u, --user USER User performing the backup."
|
echo "-u, --user USER User performing the backup."
|
||||||
echo " Default: current user."
|
echo " Default: current user."
|
||||||
echo "-s, --checksum Use the checksum rsync option to compare files"
|
echo " WARNING: This currently doesn't work with"
|
||||||
echo " (MUCH slower)."
|
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: $HOMEDIR/.simple_backup/config."
|
echo "configuration file: $HOMEDIR/.simple_backup/config."
|
||||||
@ -56,13 +56,6 @@ function read_conf {
|
|||||||
echo "$(date): Backup failed (see errors.log)" >> $LOG
|
echo "$(date): Backup failed (see errors.log)" >> $LOG
|
||||||
echo "Backup failed"
|
echo "Backup failed"
|
||||||
echo "Error: Configuration file not found" | tee $ERR
|
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 $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
|
||||||
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
||||||
@ -79,14 +72,6 @@ function read_conf {
|
|||||||
echo "$(date): Backup failed (see errors.log)" >> $LOG
|
echo "$(date): Backup failed (see errors.log)" >> $LOG
|
||||||
echo "Backup failed"
|
echo "Backup failed"
|
||||||
echo "Error: Configuration file not found" | tee -a $ERR
|
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 $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
|
||||||
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
||||||
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
||||||
@ -122,13 +107,6 @@ function read_conf {
|
|||||||
echo "Backup failed"
|
echo "Backup failed"
|
||||||
echo "Error: Output folder \"$BACKUP_DEV\" not found" | tee -a $ERR
|
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 $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
|
||||||
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
||||||
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
||||||
@ -146,7 +124,7 @@ function read_conf {
|
|||||||
if [[ ! -d "$BACKUP_DIR" ]]; then
|
if [[ ! -d "$BACKUP_DIR" ]]; then
|
||||||
mkdir -p "$BACKUP_DIR/$DATE"
|
mkdir -p "$BACKUP_DIR/$DATE"
|
||||||
else
|
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")
|
LAST_BACKUP=$(readlink -f "$BACKUP_DIR/last_backup")
|
||||||
mkdir "$BACKUP_DIR/$DATE"
|
mkdir "$BACKUP_DIR/$DATE"
|
||||||
fi
|
fi
|
||||||
@ -161,6 +139,7 @@ function read_conf {
|
|||||||
|
|
||||||
#Parse options
|
#Parse options
|
||||||
function parse_options {
|
function parse_options {
|
||||||
|
i=1
|
||||||
n_in=0
|
n_in=0
|
||||||
|
|
||||||
#Create a temporary file to store inputs
|
#Create a temporary file to store inputs
|
||||||
@ -188,9 +167,25 @@ function parse_options {
|
|||||||
do
|
do
|
||||||
input="$2"
|
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
|
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
|
else
|
||||||
|
i=$((i+1))
|
||||||
n_in=$((n_in+1))
|
n_in=$((n_in+1))
|
||||||
echo "$input" >> "$INPUTS"
|
echo "$input" >> "$INPUTS"
|
||||||
fi
|
fi
|
||||||
@ -208,19 +203,12 @@ function parse_options {
|
|||||||
echo "Backup failed"
|
echo "Backup failed"
|
||||||
echo "Error: output folder \"$BACKUP_DEV\" not found" | tee -a $ERR
|
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 $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
|
||||||
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
||||||
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
||||||
|
|
||||||
rm $INPUTS
|
rm $INPUTS
|
||||||
rm $EXCLUDE
|
rm $EXCLUDES
|
||||||
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -264,57 +252,49 @@ function parse_options {
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
-u | --user)
|
-u | --user)
|
||||||
if [[ ! -d "/home/$2" ]]; then
|
rm "$EXCLUDE"
|
||||||
echo "$(date): Backup failed (see errors.log)" >> $LOG
|
rm "$INPUTS"
|
||||||
echo "Backup failed"
|
|
||||||
echo "Error: user $2 doesn't exist" | tee -a $ERR
|
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
|
if [[ ! -d "$HOMEDIR/.simple_backup" ]]; then
|
||||||
mkdir "$HOMEDIR/.simple_backup"
|
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
|
fi
|
||||||
|
|
||||||
#Fix ownership and permissions of log files if needed
|
if [[ ! -d "/home/$2/.simple_backup" ]]; then
|
||||||
if [[ ! -z $USER ]]; then
|
mkdir "/home/$2/.simple_backup"
|
||||||
chown $USER:$USER $LOG && chmod 644 $LOG
|
|
||||||
chown $USER:$USER $ERR && chmod 644 $ERR
|
echo "Created directory \"$HOMEDIR/.simple_backup\"."
|
||||||
chown $USER:$USER $WARN && chmod 644 $WARN
|
echo "Copy there sample configuration and edit it"
|
||||||
|
echo "to your needs before running the backup."
|
||||||
|
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mv $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
|
HOMEDIR="/home/$2"
|
||||||
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
CONFIG="/home/$2/.simple_backup/config"
|
||||||
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
USER="$2"
|
||||||
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
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
|
read_conf "$config"
|
||||||
|
|
||||||
|
return
|
||||||
;;
|
;;
|
||||||
|
|
||||||
-s | --checksum)
|
|
||||||
OPTIONS="-arcv -H -X -R"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
*)
|
||||||
echo "$(date): Backup failed (see errors.log)" >> $LOG
|
echo "$(date): Backup failed (see errors.log)" >> $LOG
|
||||||
echo "Backup failed"
|
echo "Backup failed"
|
||||||
echo "Error: Option $1 not recognised. Use 'simple-backup -h' to see available options" | tee -a $ERR
|
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 $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
|
||||||
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
||||||
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
||||||
@ -335,7 +315,6 @@ ERR=$(mktemp)
|
|||||||
WARN=$(mktemp)
|
WARN=$(mktemp)
|
||||||
|
|
||||||
HOMEDIR="$HOME"
|
HOMEDIR="$HOME"
|
||||||
OPTIONS="-arvh -H -X -R"
|
|
||||||
|
|
||||||
#Check number of parameters
|
#Check number of parameters
|
||||||
if [[ "$#" -eq 0 ]]; then
|
if [[ "$#" -eq 0 ]]; then
|
||||||
@ -344,62 +323,21 @@ if [[ "$#" -eq 0 ]]; then
|
|||||||
|
|
||||||
echo "Created directory \"$HOMEDIR/.simple_backup\"."
|
echo "Created directory \"$HOMEDIR/.simple_backup\"."
|
||||||
echo "Copy there sample configuration and edit it"
|
echo "Copy there sample configuration and edit it"
|
||||||
echo "to your needs before running the backup,"
|
echo "to your needs before running the backup."
|
||||||
echo "or pass options on the command line."
|
|
||||||
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
read_conf
|
read_conf
|
||||||
else
|
else
|
||||||
parse_options "$@"
|
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
|
|
||||||
fi
|
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 "$(date): Backup finished (no files copied)" >> $LOG
|
||||||
echo "Backup finished"
|
echo "Backup finished"
|
||||||
echo "Warning: no valid input selected. Nothing to do" | tee -a $WARN
|
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 $LOG "$HOMEDIR/.simple_backup/simple_backup.log"
|
||||||
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
mv $ERR "$HOMEDIR/.simple_backup/errors.log"
|
||||||
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
mv $WARN "$HOMEDIR/.simple_backup/warnings.log"
|
||||||
@ -442,9 +380,9 @@ fi
|
|||||||
echo "Copying files. This may take a long time..."
|
echo "Copying files. This may take a long time..."
|
||||||
|
|
||||||
if [[ -z "$LAST_BACKUP" ]]; then
|
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
|
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
|
fi
|
||||||
|
|
||||||
#Update the logs
|
#Update the logs
|
||||||
|
Reference in New Issue
Block a user