On Mar 12, 2015 12:52 PM, "erik quanstrom" <quanstro@quanstro.net> wrote:
> so an interesting problem i run into from time to time is separately computing
> the files added to and deleted from a directory in a shell script.  uniq doesn't
> work for this.  certainly one can loop over two lists of files and do this easily,
> but that seems dull and tedious.
>
> but as it turns out, one can compute the deleted and added files relatively
> efficiently with diff in two steps.  obviously uniq -d gives us the union, so
>
>         fn ∩ {echo $$1 $$2 | sed 's/ /\n/g' | sort | uniq -d}

Isn't this called (set) intersection?

> and uniq -u gives us not union
>
>         fn not∩ {echo $$1 $$2 | sed 's/ /\n/g' | sort | uniq -u}

this is (set) symmetric difference.

> but then we can compuete the "difference" (relative complement) we want
> with
>
>         fn listminus {c=`{∩ $1 $2} not∩ c $1}
>
> so then
>
>         echo 'added=('  `{listminus old new} ')'
>         echo 'deleted=('  `{listminus new old} ')'
>