Handy Hack: Comparing two directory trees on Solaris 8
Posted by Alec on 17 January 2009
After some information from jim mcnamara I developed a script to compare two directory trees. I needed something that worked on Solaris 8 so it uses basic UNIX tools (and dircmp was not very useful). If you are using a more modern system then try this
#!/bin/ksh
# Compare 2 directories for differences (e.g. current release and new release)
CURRENT=$1 ; shift
NEW=$1; shift
CURRENTDIFFFILE=/tmp/$(echo $CURRENT | sed -e 's/[/.][/.]*/_/g')
NEWDIFFFILE=/tmp/$(echo $NEW | sed -e 's/[/.][/.]*/_/g')
# File pattens not to be included in compare
cat << 'EOF' > /tmp/patternFile
^.git/
^.*\.log
^logs/.*
^.*\.tmp
^.*\.err
EOF
for i in $CURRENT $NEW ; do
cd $i
# cut removed ./ that find puts at start of path name
find . -type f -print |cut -b3- |egrep -v -f /tmp/patternFile | sort > /tmp/$(echo $i | sed -e 's/[/.][/.]*/_/g')
cd -
done
echo New files
comm -13 $CURRENTDIFFFILE $NEWDIFFFILE
echo
echo Deleted files
comm -23 $CURRENTDIFFFILE $NEWDIFFFILE
echo
echo files that are different
# xargs has limitations so must pipe into a second shell
comm -12 $CURRENTDIFFFILE $NEWDIFFFILE | xargs -i echo cmp -s \"$CURRENT/{}\" \"$NEW/{}\" \|\| echo {} changed | sh


Handy Hack: Compare backups with the original « Alec the Geek said
[...] Handy Hack: Comparing two directorie trees [...]