111 lines
2.4 KiB
Plaintext
Executable File
111 lines
2.4 KiB
Plaintext
Executable File
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i bash -p bash -p rsync -p sane-scripts.sync-music
|
|
|
|
usage() {
|
|
echo "sync [flags ...] <host> [<host> ...] [passthrough flags ...]"
|
|
echo "where:"
|
|
echo " host: all|desko|lappy|moby"
|
|
exit 1
|
|
}
|
|
|
|
debug() {
|
|
if [ -n "$SYNC_DEBUG" ]; then
|
|
echo "$@"
|
|
fi
|
|
}
|
|
|
|
ifExists() {
|
|
local path="$1"
|
|
shift
|
|
local cmd="$@"
|
|
if test -d "$path"; then
|
|
debug "${cmd[@]}"
|
|
${cmd[@]}
|
|
else
|
|
debug "skipping action because $path doesn't exist"
|
|
fi
|
|
}
|
|
|
|
homeMountFor() {
|
|
local want=$1
|
|
local me=$(hostname)
|
|
if [ "$want" = "$me" ]; then
|
|
echo "$HOME"
|
|
else
|
|
echo "/mnt/$want/home"
|
|
fi
|
|
}
|
|
|
|
syncHost() {
|
|
local host=$1
|
|
shift
|
|
local syncFlags=("$@")
|
|
local deskoHome=$(homeMountFor desko)
|
|
local lappyHome=$(homeMountFor lappy)
|
|
local mobyHome=$(homeMountFor moby)
|
|
case "$host" in
|
|
(desko)
|
|
ifExists /mnt/servo/media/Music/Various.Artists \
|
|
sane-sync-music --compat /mnt/servo/media/Music "$deskoHome/Music" "${syncFlags[@]}"
|
|
;;
|
|
(lappy)
|
|
ifExists /mnt/servo/media/Music/Various.Artists \
|
|
sane-sync-music --compress --compat /mnt/servo/media/Music "$lappyHome/Music" "${syncFlags[@]}"
|
|
;;
|
|
(moby)
|
|
# copy photos/screenshots from moby to desko:
|
|
rsync -arv --exclude servo-macros "$mobyHome/Pictures/" "$deskoHome/Pictures/from/moby/"
|
|
# copy books from servo to moby; delete old/untracked ones, but keep KOreader state files (sdr)
|
|
ifExists /mnt/servo/media/Books/Books \
|
|
rsync -arv --delete --exclude '*.sdr' /mnt/servo/media/Books/ "$mobyHome/Books/local/servo/"
|
|
# copy music
|
|
ifExists /mnt/servo/media/Music/Various.Artists \
|
|
sane-sync-music --compat /mnt/servo/media/Music "$mobyHome/Music" "${syncFlags[@]}"
|
|
;;
|
|
(*)
|
|
usage
|
|
;;
|
|
esac
|
|
}
|
|
|
|
hosts=()
|
|
passthruArgs=()
|
|
parseArgs() {
|
|
while [[ $# -ge 1 ]]; do
|
|
local arg=$1
|
|
case $arg in
|
|
(desko|lappy|moby)
|
|
hosts+=("$arg")
|
|
shift
|
|
;;
|
|
(all)
|
|
hosts+=(desko lappy moby)
|
|
shift
|
|
;;
|
|
(--verbose)
|
|
if [[ "${#hosts[@]}" -eq 0 ]]; then
|
|
SYNC_DEBUG=1
|
|
shift
|
|
else
|
|
# it's a passthru flag
|
|
break
|
|
fi
|
|
;;
|
|
(--help)
|
|
usage
|
|
shift
|
|
;;
|
|
(*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
passthruArgs+=("$@")
|
|
}
|
|
|
|
parseArgs "$@"
|
|
debug "hosts:" "${hosts[@]}"
|
|
for host in "${hosts[@]}"; do
|
|
syncHost "$host" "${passthruArgs[@]}"
|
|
done
|