#!/bin/sh

dir_diff() {
	compare_mode=""
	#compare_mode="--size-only"
	#compare_mode="-c"
	#rsync -n -rai ${compare_mode} --exclude="\.*" $1/ $2/ | grep -v "^\." | cut -d " " -f2
	exclude_filter='--exclude=".*"'
	#                                            match all non .   file add              file send            file del               dir change
	#rsync -n -rai --delete ${compare_mode} ${ex} ${1}/ ${2}/ | grep -v "^\." | sed 's/>f+/<<<< /' | sed 's/>f../Diff /' | sed 's/\*del/>>>> /' | sed 's/cd.*//' | cut -w -f1 -f3-

	#from the rsync man page
	#          /----------- < send to remote, > recieve to local, c local change, h hard link, . no update, * message instead of code
	#          |/---------- f file, d directory, L symlink, D device, S special file
	#          ||/--------- checksum changed
	#          |||/-------- size changed
	#          ||||/------- modification time changed
	#          |||||/------ permission changed
	#          ||||||/----- owner changed
	#          |||||||/---- group changed
	#          ||||||||/--- not used
	#          |||||||||/-- ACL changed
	#          ||||||||||/- extended attribute chage
	#format is YXcstpoguax
	#          YX+++++++++ X is new
	#          YX......... X has no change
	#          YX          X is identical (spaces)
	#          YX????????? X has unknown attributes (maybe old rsync version)
	#          *deleting   X is only on dest and will be deleted

	rsync -n -rai --delete ${compare_mode} ${exclude_filter} ${1}/ ${2}/ | sed 's/^>[f|d|L|D|S]+++++++++/<<<<   /' | sed -E 's/^[<|>][f|d|L|D|S]\.\.\......./diff(a)/' | sed -E 's/^[<|>][f|d|L|D|S]\.\......../diff(t)/' | sed -E 's/^[<|>][f|d|L|D|S]........./diff(c)/' | sed 's/^\*deleting  />>>>   /' | sed 's/^c.........../diff    /' | grep -v "^\." 
}

echo "Diff $1 : $2"
dir_diff $1 $2
echo ""
