Re: diff(ing) 2 directories ?
- From: Ivan Young <idy@xxxxxx>
- Date: Wed, 15 Jun 2005 13:22:41 +0100
Mel wrote:
is there code out there to do a diff on 2 directory contents, and report on files that are new, none existent, etc.
thanks for your help
Assuming unix, I use the following shell script:- ---- cut here ------- #!/usr/local/bin/bash # # cmptree: compare directory trees recursively and report the differences. # Author: Ives Aerts
function gettype () {
if [ -L $1 ]; then
echo "softlink"
elif [ -f $1 ]; then
echo "file"
elif [ -d $1 ]; then
echo "directory"
else
echo "unknown"
fi
}function exists () {
if [ -e $1 -o -L $1 ]; then
return 0;
else
echo "$1 does not exist."
return 1;
fi
}function comparefile () {
cmp -s $1 $2
if [ $? -gt 0 ]; then
echo "$1 different from $2"
# else
# echo "$1 same as $2"
fi
return
}function comparedirectory () {
local result=0
for i in `(ls -A $1 && ls -A $2) | sort | uniq`; do
compare $1/$i $2/$i || result=1
done
return $result
}function comparesoftlink () {
local dest1=`ls -l $1 | awk '{ print $11 }'`
local dest2=`ls -l $2 | awk '{ print $11 }'` if [ $dest1 = $dest2 ]; then
return 0
else
echo "different link targets $1 -> $dest1, $2 -> $dest2"
return 1
fi
}# compare a file, directory, or softlink
function compare () {
(exists $1 && exists $2) || return 1;local type1=$(gettype $1) local type2=$(gettype $2)
if [ $type1 = $type2 ]; then
case $type1 in
file)
comparefile $1 $2
;;
directory)
comparedirectory $1 $2
;;
softlink)
comparesoftlink $1 $2
;;
*)
echo "$1 of unknown type"
false
;;
esac
else
echo "type mismatch: $type1 ($1) and $type2 ($2)."
false
fi
return
}if [ 2 -ne $# ]; then cat << EOU Usage: $0 dir1 dir2 Compare directory trees: files are binary compared (cmp) directories are checked for identical content soft links are checked for identical targets EOU exit 10 fi
compare $1 $2 exit $? -------- cut here ---------------
Ivan... .
- References:
- diff(ing) 2 directories ?
- From: Mel
- diff(ing) 2 directories ?
- Prev by Date: Re: xml format question
- Next by Date: Re: WINDOWS200: Detecting the default web browser
- Previous by thread: Re: diff(ing) 2 directories ?
- Next by thread: Dr. Dobb's Tcl-URL! - weekly Tcl news and links (Jun 14)
- Index(es):
Relevant Pages
|
Loading