#! /bin/sh # chksum=cksum quiet=0 while [ $# -gt 0 ] do case "$1" in -q ) quiet=1 ; shift ;; -c ) case "$2" in MD5|md5 ) chksum=md5sum ;; CRC|crc|CRC32|crc32 ) chksum=cksum ;; SHA1|sha1) chksum=sha1sum ;; MD2|md2) chksum=md2sum ;; * ) echo "Digest algorithm $2 not supported" >&2 ; exit 1 ;; esac shift 2 ;; -h | --help ) echo "Usage: $0 [-q] [-c MD5|SHA1|CRC] path ..." echo " -q do not echo pathname on each line" echo " -c select digest algorithm (CRC is fastest, SHA1 slowest)" echo "" echo " path root of the tree to digest (mmm, now that's tasty)" echo "" if [ "$1" = "--help" ]; then echo " Typical performance numbers, on 2 GHz Pentium 4 for 2.8 GByte" echo " worth of data in 70 000 files, disk throughput of 30 MByte/s:" echo " CRC32 2 minutes" echo " MD5 2'45 minutes" echo " SHA1 3'15 minutes" echo "" fi exit 0 ;; -- ) shift ; break ;; -* ) echo "Unknown option $1, exiting" >&2 ; exit 1 ;; * ) break ;; esac done case "$#" in 0 ) echo "Usage: $0 pathname [pathname]" >&2 ;; * ) ;; esac die() { rc=$1 shift echo "Fatal error: $@" >&2 exit $rc } execexists() { path=$1 which which > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "Internal error, programme -which- not found" >&2 exit 1 fi which $path > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "Selected programme, $path, not found. Sorry." >&2 exit 1 fi } execexists $chksum for path in "$@" do showpath=" $path" [ $quiet -ne 0 ] && showpath="" [ -d $path ] || die 2 "Directory $path not found" ( cd $path find . -type f | xargs $chksum | $chksum | awk -v p="$showpath" '{printf "%s%s\n",$1,p}' ) done