#!/bin/ksh #..# @(#) multi-diff #..# systems: #..# sites: tag=`basename $0` tm=/tmp/$tag tmp=${tm}$$ usage="usage: $0 [-F] [-e] [-V] file file ..." while [ $# -gt 0 ] do case $1 in -v|-x) set $1 ;; -vi) vi $0; exit ;; -about) echo "$tag was written by David Ledger" echo "dledger@ivdcs.demon.co.uk" exit ;; -h) echo "$usage Does a diff between: arg1arg2; arg1arg3; ...; arg1argN and without -F flag: arg2arg3; arg2arg4; ...; arg2argN . . . argN-1argN also. With -e(qual) flag, it does comparisons as without -F, but does not report inequalities, and moves on an argument when it finds a match. If any first file in a comparison is a single line with no newline, diff would fail, so cmp is used instead. Diff or cmp output is supressed unless -V is used" exit ;; -F) fast=1 ;; -e) eq=1 ;; -V) q=1 ;; *) [ $# -lt 2 ] && { [ ! "$ref" ] && { echo $usage; exit; }; } ref=$1 expr "`wc -l $ref`" : '[^0-9]*[0-9]*.*' /dev/null && difok=1 || difok=0 case "${difok}.${eq-0}.${q-0}" in 0.0.0) for ver in $*; do [ "$ver" = "$ref" ] && continue cmp $ref $ver /dev/null && echo "$ver == $ref" || echo "$ver != $ref" done ;; 0.0.1) for ver in $*; do [ "$ver" = "$ref" ] && continue cmp $ref $ver && echo "$ver == $ref" || echo "$ver != $ref" done ;; 0.1*) for ver in $*; do [ "$ver" = "$ref" ] && continue expr "$found" : '.*'$ver'.*' /dev/null && continue cmp $ref $ver /dev/null && { echo "$ver == $ref" found="${found} ${ver}" continue; } done ;; 1.0.0) for ver in $*; do [ "$ver" = "$ref" ] && continue diff $ref $ver /dev/null && echo "$ver == $ref" || echo "$ver != $ref" done ;; 1.0.1) for ver in $*; do [ "$ver" = "$ref" ] && continue diff $ref $ver && echo "$ver == $ref" || echo "$ver != $ref" done ;; 1.1*) for ver in $*; do [ "$ver" = "$ref" ] && continue expr "$found" : '.*'$ver'.*' /dev/null && continue diff $ref $ver /dev/null && { echo "$ver == $ref" found="${found} ${ver}" continue; } done ;; esac [ "${fast-0}" -eq 1 ] && exit ;; esac shift done | |