#!/bin/sh # Copyleft (C) 2008 by VooDooMan # Version: 8.2009-05-13T2041-UTC+0100 # License: Public domain # BEGIN: config HASH_ALGOS="${HASH_ALGOS} md5 sha1 sha256 sha224 sha256 sha384 sha512" OUT_PREFIX="DIGESTS" EXCLUDE_PATTERNS="DIGESTS* .* mkdigests.sh check_digests.sh" # END : config HASH_ALGOS="${HASH_ALGOS} $1" HASH_ALGOS=`echo -n "${HASH_ALGOS}" | sed -r 's, +, ,g' | sed 's, ,\n,g' | \ sort | uniq | tr '\n' ' '` unset ha unset bad my_path="`echo -n \"${PATH}\" | tr ':' '\n' | sort | uniq`" for i in ${HASH_ALGOS}; do got=0; for i2 in $my_path; do if [ -x "${i2}/${i}sum" ]; then ha="${ha} ${i} " got=1 break fi done if [ $got -eq 0 ]; then bad="${bad} ${i}sum " fi done bad="`echo -n \"${bad}\" | sed -r 's, +, ,g' | tr ' ' '\n' | sort | uniq`" if ! test -z "${bad}"; then echo -n "WARNING: following binaries: ${bad}" >&2 echo '' >&2 echo "does not exist in \$PATH, or you don't have +x permisssion!" >&2 fi HASH_ALGOS=`echo -n "${ha}" | sed -r 's, +, ,g' | sed 's, ,\n,g' | \ sort | uniq | tr '\n' ' '` echo "Using algorithms:${HASH_ALGOS}" this=`basename $0` find . -type d | while read dn; do save_cwd="`pwd`" cd "$dn" for i1 in ${HASH_ALGOS}; do OUT="${OUT_PREFIX}.$i1" rm -f ${OUT} || exit 1 done find . -maxdepth 1 -type f -o -type l | while read fn; do i2=`basename "$fn"` ok="yes" for i3 in ${EXCLUDE_PATTERNS}; do if [ $i2 == $i3 ]; then ok="no"; fi done if [ $ok = "yes" ]; then echo -n "hashing: $fn ... " for i1 in ${HASH_ALGOS}; do echo -n "${i1} " OUT="${OUT_PREFIX}.$i1" touch ${OUT} || exit 1 ${i1}sum -b "$fn" >>${OUT} || exit 1 done echo "DONE" fi done cd "${save_cwd}" done exit 0 #EOF