#!/bin/bash

# Sync a collection of directories, ordered by size.
[ -z "$2" ] && echo "usage: $0 <host> <dir> [<indexfile>]" && exit 1

HOST="$1"
DIR="$2"
LST="$3"
[ -z "$LST" ] && LST=$HOST.lst

RSYNC="rsync.merge --bwlimit=100 --progress --protect-args"



process_list () {
    trap sigint SIGINT
    while read REC; do
        ITEM=$(echo "$REC" | cut -f 2)
        # Skip connection if we already have file.
        if [ ! -e "$ITEM" ]; then
            echo $RSYNC "$HOST:$DIR/$ITEM"
            $RSYNC "$HOST:$DIR/$ITEM" . || rm -rf "$ITEM"
        else
            echo "Skipping $ITEM"
        fi
    done
}

# MAINPID=$BASHPID
sigint () {
    echo SIGINT
    exit 1
    # kill $MAINPID
}

trap sigint SIGINT


# Cache index file list
if [ ! -e $LST ]; then
    ssh $HOST "cd '$DIR'; find -maxdepth 1 -exec du -s '{}' ';'" | sort -n >$LST
fi

(process_list) < $LST

