Skip to content

Instantly share code, notes, and snippets.

@ivan-demchenko
Last active October 28, 2018 05:45
Show Gist options
  • Save ivan-demchenko/fdce5adfe602027038c1d3c3f86994eb to your computer and use it in GitHub Desktop.
Save ivan-demchenko/fdce5adfe602027038c1d3c3f86994eb to your computer and use it in GitHub Desktop.
Automatic backup with notifications and rsync
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.idemchenko.automaticbackups</string>
<key>StandardOutPath</key>
<string>/tmp/autoBackup.stdout</string>
<key>StandardErrorPath</key>
<string>/tmp/autoBackup.stderr</string>
<key>ProgramArguments</key>
<array>
<string>/Users/<user>/backup.sh</string>
<string>/Volumes/Macintosh HD/Users/<user>/<path>/</string>
<string>/Volumes/EXT HDD</string>
<string>some/dir/on/ext/hdd</string>
</array>
<key>StartOnMount</key>
<true/>
</dict>
</plist>
#!/bin/bash
NOW=$(date)
SRC_PATH=$1
DEST_VOLUME=$2
DEST_PATH=$3
FULL_DEST_PATH="$DEST_VOLUME/$DEST_PATH"
echo "------------------------------"
echo "Backup:.... $NOW"
echo "From:...... $SRC_PATH"
echo "To:........ $FULL_DEST_PATH"
N_FILES_TO_BACKUP=$(diff -qr "$SRC_PATH" "$FULL_DEST_PATH" | grep "$SRC_PATH" | wc -l)
echo "Found:..... $N_FILES_TO_BACKUP files to back up"
show_start_notification() {
osascript - "$N_FILES_TO_BACKUP" <<'EOF'
on run argv
set n to item 1 of argv as integer
display notification "Starting backup of " & n & " files" with title "Autmatic back-up"
end run
EOF
}
show_nothing_to_backup_notification() {
osascript -e 'display notification "Nothing to backup" with title "Autmatic back-up"'
}
show_finish_notification() {
osascript -e 'display notification "Backup has finished" with title "Autmatic back-up"'
}
if [ $N_FILES_TO_BACKUP -gt 0 ]
then
mount | grep "on ${DEST_VOLUME}" > /dev/null
if [ $? -eq 0 ]
then
echo "External HDD has been found"
show_start_notification
cp -R "$SRC_PATH" "$FULL_DEST_PATH"
show_finish_notification
else
echo "No external HDD has been found"
fi
else
echo "Nothing to backup"
show_nothing_to_backup_notification
fi
echo "Backup complete"
echo "------------------------------"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment