Article Listing 1 Listing 2 Listing 3 Listing 4
Listing 5 Listing 6 Listing 7 Listing 8 Listing 9
Listing 10 Listing 11 Listing 12 dec2004.tar

Listing 3 compare

#!/bin/ksh

#*******************************************************
# Listing 3:
# File: compare
#
# Description:
#
# This script compares two separate snapshots and generates a report.
#
# Author: John Spurgeon (john.p.spurgeon@intel.com)
#
#*******************************************************

if [ -z "$ENTRAP" ]
then
   $(dirname $0)/entrap
   exit 0
fi

VERBOSE=$FALSE
SUFFIX=""

while getopts fvh OPTION
do
   case "$OPTION"
   in
      f)  SUFFIX=".f" ;;
      v)  VERBOSE=$TRUE ;;
      h)  echo "`basename $0` [-av] snapshot1 snapshot2"
          exit 0 ;;
     \?)  exit 1 ;;
   esac
done

if [ $(($OPTIND + 1)) -gt "$#" ]
then
   echo "[$(basename $0)] Error: Missing one or two snapshot names!" >& 2
   exit 1
fi

shift $(($OPTIND - 1))
SNAPSHOT1=$1
SNAPSHOT2=$2
SNAPSHOT1_DIR=$SNAPSHOT_ROOT/$SNAPSHOT1
SNAPSHOT2_DIR=$SNAPSHOT_ROOT/$SNAPSHOT2

#
# Perform the comparison.
#

while read DIR FILE
do
   for PATHNAME in $SNAPSHOT1_DIR/$FILE$SUFFIX $SNAPSHOT2_DIR/$FILE$SUFFIX
   do
      if ! [ -f $PATHNAME ]
      then
         echo "[$(basename $0)] Error: $PATHNAME does not exist!" >& 2
         exit 1
      fi
   done

   diff $SNAPSHOT1_DIR/$FILE$SUFFIX $SNAPSHOT2_DIR/$FILE$SUFFIX | \
   awk '$1 == "<" || $1 == ">" {print}' | \
   sort -d -k 2,2 > $TEMP_DIR/$FILE$SUFFIX
done < $CONFIG_FILE

#
# Generate the report.
#

echo "Date: `date`"
echo "Comparing $SNAPSHOT1 vs. $SNAPSHOT2"
echo "\nFiltering is turned \c"

if [ -z "$SUFFIX" ]
then
   echo "OFF"
else
   echo "ON"
fi

while read DIR FILE
do
   CHANGES=$FALSE

   echo "\nChecking: $DIR\n"
   num=$($COUNT_ADDED $TEMP_DIR/$FILE$SUFFIX)
   if [ $num -gt 0 ]
   then
      if [ $num -eq 1 ]
      then
         echo "$num file has been added"
      else
         echo "$num files have been added"
      fi
      if [ $VERBOSE -eq $TRUE ]
      then
         echo
         $LIST_ADDED $TEMP_DIR/$FILE$SUFFIX
         echo
      fi
   CHANGES=$TRUE
   fi
   num=$($COUNT_DELETED $TEMP_DIR/$FILE$SUFFIX)
   if [ $num -gt 0 ]
   then
      if [ $num -eq 1 ]
      then
         echo "$num file has been deleted"
      else
         echo "$num files have been deleted"
      fi
      if [ $VERBOSE -eq $TRUE ]
      then
         echo
         $LIST_DELETED $TEMP_DIR/$FILE$SUFFIX
         echo
      fi
      CHANGES=$TRUE
   fi
   num=$($COUNT_CHANGED $TEMP_DIR/$FILE$SUFFIX)
   if [ $num -gt 0 ]
   then
      if [ $num -eq 1 ]
      then
         echo "$num file has been modified"
         else
         echo "$num files have been modified"
      fi
      if [ $VERBOSE -eq $TRUE ]
      then
         echo
         $LIST_CHANGED $TEMP_DIR/$FILE$SUFFIX $SNAPSHOT1 $SNAPSHOT2
         echo
      fi
         CHANGES=$TRUE
   fi
   if [ "$CHANGES" -eq $FALSE ]
   then
      echo "No changes"
   fi
done < $CONFIG_FILE

#
# Clean up the temporary files.
# BE CAREFULL: Don't do something stupid like "rm -rf /"
#

if [ -n "$TEMP_DIR" ] && [ -d "$TEMP_DIR" ]
then
   while read DIR FILE
   do
      if [ -n "$FILE" ]
      then
         [ -f $TEMP_DIR/$FILE ] && rm $TEMP_DIR/$FILE
         [ -f $TEMP_DIR/$FILE.f ] && rm $TEMP_DIR/$FILE.f
      fi
   done < $CONFIG_FILE
fi


#!/bin/ksh