Skip to content

Instantly share code, notes, and snippets.

@tevino
Last active April 12, 2018 09:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tevino/9be08e06a24deec7b1dd8202b0ec4ac7 to your computer and use it in GitHub Desktop.
Save tevino/9be08e06a24deec7b1dd8202b0ec4ac7 to your computer and use it in GitHub Desktop.
time-capsule install; time-capsule monitor
#!/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