#!/usr/bin/zsh # rsyncs data from one directory to another. By default all subdirectories of the src directory are copied to the dst directory. No checks are done to verify that the arguments are directories because -d doesn't play nice with remote hosts. LOG_DIR="$HOME/rsync_logs" LOG_FILE="$LOG_DIR/$(date --iso-8601).log" RSYNC_OPTS=("-aP" "--no-owner" "--delete-during" "--exclude=lost+found" "--log-file=$LOG_FILE") if [ $# -lt 2 ]; then echo "Usage: backup " exit 1 fi if [ ! -d "$LOG_DIR" ]; then echo "Log directory does not exist, creating" mkdir -p "$LOG_DIR" if [ $? -ne 0 ]; then echo "Failed to create log directory, exiting" exit 1 fi fi echo "$(date)" > "$LOG_FILE" if [ $? -ne 0 ]; then echo "Failed to create log file, exiting" exit 1 fi echo "rsync $RSYNC_OPTS ${1%/}/ $2" >> "$LOG_FILE" rsync $RSYNC_OPTS ${1%/}/ $2 if [ $? -eq 0 ]; then echo "Backup successful." >> "$LOG_FILE" else echo "Backup exited with code $?" >> "$LOG_FILE" fi