Я делаю так:
ESCDIR=$(echo "$DIR" |sed -e "s,\([]\(\).^\*\$\/&[]\),\\\\\1,g")
scp -p $DIR/.lastsync $HOST:$DIR
ssh $HOST find $DIR/$SUBDIR -newer $DIR/.lastsync | sed -e "s/$ESCDIR\///" | \
rsync --exclude-from=- --delete -av $DIR/$SUBDIR $HOST:$DIR
rsync --delete -av $HOST:$DIR/$SUBDIR $DIR
rsync --delete -av $DIR/$SUBDIR $HOST:$DIR
DATE=`date`
echo "$DATE Syncing finished"
echo "====================================================="
echo " "
touch $DIR/.lastsync
Предполагает, что во во время синка файлы не изменяются и синк не прервётся. Последнее легко исправить, а вот первое без локальной db сделать невозможно.