59 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#! /bin/sh -e
 | 
						|
 | 
						|
#DIFF=zdc
 | 
						|
DIFF=bsdiff
 | 
						|
 | 
						|
srcA=$1
 | 
						|
srcB=$2
 | 
						|
 | 
						|
if test -z "$srcA" -o -z "$srcB"; then
 | 
						|
    echo "syntax: bdiff.sh srcA srcB"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
(cd $srcB && find . -type f) | while read fn; do
 | 
						|
 | 
						|
    if test -f "$srcA/$fn"; then
 | 
						|
 | 
						|
        if ! test -f "$srcB/$fn"; then
 | 
						|
            echo "DELETE $fn"
 | 
						|
        else
 | 
						|
 | 
						|
            if ! cmp "$srcA/$fn" "$srcB/$fn" > /dev/null; then
 | 
						|
                    
 | 
						|
                echo "FILE DELTA FOR $fn"
 | 
						|
 | 
						|
                TMPFILE=/tmp/__bsdiff
 | 
						|
                $DIFF "$srcA/$fn" "$srcB/$fn" $TMPFILE
 | 
						|
                cat $TMPFILE
 | 
						|
 | 
						|
                diffSize=$(stat -c '%s' $TMPFILE)
 | 
						|
 | 
						|
                # For comparison.
 | 
						|
                bzipSize=$(bzip2 < "$srcB/$fn" | wc -m)
 | 
						|
 | 
						|
                gain=$(echo "scale=2; ($diffSize - $bzipSize) / $bzipSize * 100" | bc)
 | 
						|
 | 
						|
                ouch=$(if test "${gain:0:1}" != "-"; then echo "!"; fi)
 | 
						|
 | 
						|
                printf "%7.2f %1s %10d %10d %s\n" \
 | 
						|
                    "$gain" "$ouch" "$diffSize" "$bzipSize" "$fn" >&2
 | 
						|
#        echo "$fn -> $diffSize $bzipSize ==> $gain  $ouch" >&2
 | 
						|
 | 
						|
                rm $TMPFILE
 | 
						|
 | 
						|
            fi
 | 
						|
 | 
						|
        fi
 | 
						|
 | 
						|
        # Note: be silent about unchanged files.
 | 
						|
 | 
						|
    else
 | 
						|
 | 
						|
	echo "NEW FILE $fn"
 | 
						|
 | 
						|
	cat "$srcB/$fn"
 | 
						|
 | 
						|
    fi
 | 
						|
 | 
						|
done
 |