Last active
April 12, 2018 09:59
-
-
Save tevino/9be08e06a24deec7b1dd8202b0ec4ac7 to your computer and use it in GitHub Desktop.
time-capsule install; time-capsule monitor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -o posix | |
TC=$0 | |
GLOBAL_EXCLUDES="\.git" | |
alert() { | |
msg=$1 | |
echo -e "==> \033[1m$msg\033[0m" | |
} | |
watch() { | |
local path="${1-.}" | |
alert "watching changes in '$path'" | |
fswatch --batch-marker -e $GLOBAL_EXCLUDES -r "$path" | |
} | |
backup() { | |
local name="${1-$(cat_name)}" | |
if [[ -z "$name" ]]; then | |
alert "name not provided" >&2 | |
exit 1 | |
fi | |
local path="${2-.}" | |
alert "backing up $path into $name" | |
bup index "$path" && bup save -n "$name" "$path" | |
alert "done" | |
} | |
watch_and_backup() { | |
local name="${1-$(cat_name)}" | |
if [[ -z "$name" ]]; then | |
alert "name neither provided nor set" >&2 | |
exit 1 | |
fi | |
local path="${2-.}" | |
alert "first backup immediately" | |
$TC backup "$name" "$path" | |
$TC watch "$path" | { | |
while true; do | |
read -s -r | |
[ -z "$REPLY" ] && return | |
if [ "$REPLY" == "NoOp" ]; then | |
$TC backup "$name" "$path" | |
else | |
echo "$REPLY" | |
fi | |
done | |
} | |
} | |
cat_name() { | |
cat .time-capsule 2>/dev/null | |
} | |
print_name() { | |
local name | |
if ! name="$(cat_name)"; then | |
alert "no name set" >&2 | |
exit 1 | |
fi | |
echo "$name" | |
} | |
set_name() { | |
local name=$1 | |
if [[ -z "$name" ]]; then | |
alert "name can't be empty" >&2 | |
exit 1 | |
fi | |
path="${2-.}" | |
alert -n "$name" > "$path/.time-capsule" && echo "name of $path set to $name" | |
} | |
web() { | |
bup web --browser "$@" | |
} | |
ls() { | |
bup ls "$@" | |
} | |
size() { | |
du -sh ~/.bup | |
} | |
init() { | |
bup init "$@" | |
} | |
install() { | |
brew install fswatch par2 bup | |
} | |
case $1 in | |
backup) backup "${@:2}";; | |
watch) watch "${@:2}";; | |
monitor) watch_and_backup "${@:2}";; | |
set-name) set_name "${@:2}";; | |
print-name) print_name;; | |
web) web "${@:2}";; | |
ls) ls "${@:2}";; | |
size) size "${@:2}";; | |
init) init "${@:2}";; | |
install) install;; | |
*) alert "Usage: $(basename "$0") backup|watch|monitor|set-name|print-name|web|install [NAME] [PATH]" | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment