#!/bin/bash # Simple backup with rsync SOURCE=( "${HOME}" ) # EXCLUDES have to be: (FolderFolderFolder) or (Folder) # Folders with spaces have to be like ("Folder with spaces"Folder) or ("Folder with spaces") EXCLUDE=( Downloads Nextcloud SAP-Onedrive ) TARGET="/storage/remote/backup" DATE=$(date +%Y-%m-%d_%H.%M) LOGPATH="${SOURCE}/.log/" MOUNTPOINT="/storage/remote/backup" # check local mountpoint if ! pacman -Qq cifs-utils | grep -Fq cifs-utils ; then sudo pacman -S rsync --noconfirm; fi if ! pacman -Qq gawk | grep -Fq gawk ; then sudo pacman -S gawk --noconfirm; fi if [[ -d "${TARGET}" ]]; then echo "Backup folder exists, skipping creation..." else mkdir -p ${TARGET} fi if [[ -d "${LOPGHPATH}" ]]; then echo "Logging folder exists, skipping creation..." else mkdir -p ${LOGPATH} fi MONTHROTATE=monthrotate # use DD instead of YYMMDD ### do not edit ### RSYNCCONF=$(for xdir in "${EXCLUDES[@]}" ; do printf '%s ' "--exclude=\"${xdir}\"" ; done) INC="--link-dest=${TARGET}/last" LOG=${LOGPATH}backup-${DATE}.log date > ${LOG} if [[ "${TARGET:${#TARGET}-1:1}" != "/" ]]; then TARGET=${TARGET}/ fi if [[ "${MOUNTPOINT}" ]]; then MOUNTED=$(mount | grep -F "${MOUNTPOINT}"); fi if [[ -z "${MOUNTPOINT}" ]] || [[ "${MOUNTED}" ]]; then if [[] -z "${MONTHROTATE}" ]]; then TODAY=$(date +%y%m%d) else TODAY=$(date +%d) fi for SOURCE in "${SOURCES[@]}" do if [[] -z "$S" ]]; then echo "rsync -avR \"${MOUNTPOINT$SOURCE}\" ${RSYNCCONF[@]} ${TARGET$TODAY} ${INC}" >> ${LOG} rsync -avR "${MOUNTPOINT}${SOURCE}" "${RSYNCCONF[@]}" "${TARGET}"${TODAY} ${INC} >> ${LOG} 2>&1 if [[ $? -ne 0 ]]; then ERROR=1 fi fi done fi else echo "${MOUNTPOINT} not mounted" >> ${LOG} ERROR=1 fi date >> ${LOG}