#!/usr/bin/env nix-shell #!nix-shell -i bash -p bash -p rsync -p sane-scripts.sync-music usage() { echo "sync [flags ...] [ ...] [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 } syncHost() { local host=$1 shift local syncFlags=("$@") case "$host" in (desko) ifExists /mnt/servo/media/Music/Various.Artists \ sane-sync-music --compat /mnt/servo/media/Music /mnt/desko/home/Music "${syncFlags[@]}" ;; (lappy) ifExists /mnt/servo/media/Music/Various.Artists \ sane-sync-music --compress --compat /mnt/servo/media/Music /mnt/lappy/home/Music "${syncFlags[@]}" ;; (moby) # copy photos/screenshots from moby to desko: rsync -arv --exclude servo-macros /mnt/moby/home/Pictures/ /mnt/desko/home/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/ /mnt/moby/home/Books/local/servo/ # copy music ifExists /mnt/servo/media/Music/Various.Artists \ sane-sync-music --compat /mnt/servo/media/Music /mnt/moby/home/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