#!/bin/bash # # diffzips - diff two ZIP files # # $Id$ me=`basename "$0"` TMPDIR=${TMPDIR:=/tmp} Die() { echo $me: fatal error: $@ 1>&2; exit 1; } DieIfMissing() { command -v "$1" >/dev/null || Die missing executable $1; } DieIfMissing unzip DieIfMissing realpath [ -d "$TMPDIR" ] || Die not a directory: $TMPDIR zip1="${@:$#-1:1}" zip2="${@:$#}" IsZipFile() { [ -f "$1" ] || Die not a file: $1 case `file -b "$1"` in 'Zip archive data'*);; *) Die no ZIP file: $1;; esac } IsZipFile "$zip1" IsZipFile "$zip2" Havedir() { [ -d "$1" ] || mkdir -p "$1" || Die no directory and cannot create it: $1 } Unhavedir() { [ -d "$1" ] || return rm -rf "$1" d=`dirname "$1"` while rmdir "$d" 2>/dev/null do d=`dirname "$d"` done } zip1=`realpath "$zip1"` zip2=`realpath "$zip2"` wd="$TMPDIR/$me-$$" Havedir "$wd" || Die cannot create working directory: $wd cd "$wd" || Die cannot cd to $wd td1=`echo "$zip1" | sed 's#^/##'` td2=`echo "$zip2" | sed 's#^/##'` Havedir "$td1" || Die cannot create directory "$TMPDIR$zip1" Havedir "$td2" || Die cannot create directory "$TMPDIR$zip2" unzip -qd "$td1" "$zip1" unzip -qd "$td2" "$zip2" diff "${@:1:$#-2}" "$td1" "$td2" cd - Unhavedir "$wd"