#!/bin/sh # DiffDirs.sh # 2006-06-16 # Chieh Cheng # http://www.CynosureX.com/ # GNU General Public License (GPL), Version 2, June 1991 scriptname=`echo $0 | sed s/\\\\/.*\\\\///g` if [ $# -ne 3 ] then echo " Usage: $scriptname \"dir1\" \"dir2\" recurse?" echo echo " recurse? - Recurse into sub-directories." echo " Yes or no response." echo " \"yes\" or \"y\" evaluates to true." exit fi dir1="$1" dir2="$2" recurse="$3" sleep 1 tag=`date` compareSet="DiffDirs_Compare_${tag}" processedSet="DiffDirs_Processed" diffFiles () { d1="$1" d2="$2" exec < `Set_GetFileName.sh "${compareSet}"` while read file do if [ -d "${d1}/${file}" -a -d "${d2}/${file}" ] then if [ "${recurse}" == "yes" -o "${recurse}" == "y" ] then "${scriptname}" "${d1}/${file}" "${d2}/${file}" "${recurse}" else echo "${d1}/${file} and ${d2}/${file} are directories." fi else if [ -d "${d1}/${file}" -o -d "${d2}/${file}" ] then echo "${d1}/${file} and ${d2}/${file} do not match." else result=`Set_Has.sh "${processedSet}" "${d1}/${file}"` if [ "${result}" == "false" ] then diff -q "${d1}/${file}" "${d2}/${file}" Set_Add.sh "${processedSet}" "${d1}/${file}" Set_Add.sh "${processedSet}" "${d2}/${file}" fi fi fi done } makeCompareSet () { tempSet="DiffDirs_Temp" d1="$1" d2="$2" cwd=`pwd` Set_New.sh "${tempSet}" cd "${d1}" for file in * do if [ "${file}" != "*" ] then Set_Add.sh "${tempSet}" "${file}" fi done cd "${cwd}" cd "${d2}" for file in * do if [ "${file}" != "*" ] then Set_Add.sh "${tempSet}" "${file}" fi done cd "${cwd}" Set_Unique.sh "${tempSet}" "${compareSet}" Set_Delete.sh "${tempSet}" } result=`Set_Exists.sh "${processedSet}"` if [ "${result}" = "true" ] then parent="false" else parent="true" Set_New.sh "${processedSet}" fi if [ -d "${dir1}" -a -d "${dir2}" ] then Set_New.sh "${compareSet}" makeCompareSet "${dir1}" "${dir2}" diffFiles "${dir1}" "${dir2}" Set_Delete.sh "${compareSet}" else echo "${dir1} and/or ${dir2} are not directories!" fi if [ "${parent}" = "true" ] then Set_Delete.sh "${processedSet}" fi