123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #!/bin/sh
- die()
- {
- echo "$*" >&2
- exit 1
- }
- # $1=binary $2=sumfile
- checksum()
- {
- local binary="$1"
- local sumfile="$2"
- "$binary" --check --quiet --status --warn --strict "$sumfile" >/dev/null ||\
- die "One checksum in '$sumfile' FAILED."
- }
- # $1=basedirectory
- check_all_sums()
- {
- local basedirectory="$1"
- [ -d "$basedirectory" ] || die "$basedirectory is not a directory"
- find "$basedirectory" \
- -name MD5SUM -o -name MD5SUMS -o \
- -name SHA1SUM -o -name SHA1SUMS -o \
- -name SHA256SUM -o -name SHA256SUMS -o \
- -name SHA512SUM -o -name SHA512SUMS \
- | while read path; do
- echo "Checking '$path'..."
- local dir="$(dirname "$path")"
- local file="$(basename "$path")"
- local prev_dir="$(pwd)"
- cd "$dir" || die "Failed to change directory"
- if [ "$file" = "MD5SUM" -o "$file" = "MD5SUMS" ]; then
- checksum md5sum "$file"
- elif [ "$file" = "SHA1SUM" -o "$file" = "SHA1SUMS" ]; then
- checksum sha1sum "$file"
- elif [ "$file" = "SHA256SUM" -o "$file" = "SHA256SUMS" ]; then
- checksum sha256sum "$file"
- elif [ "$file" = "SHA512SUM" -o "$file" = "SHA512SUMS" ]; then
- checksum sha512sum "$file"
- else
- die "Don't know how to handle '$path'"
- fi
- cd "$prev_dir" || die "Failed to change directory"
- done
- }
- help()
- {
- echo "Usage: check-all-sums DIRECTORY"
- }
- [ $# -eq 1 ] || {
- help
- exit 1
- }
- check_all_sums "$1"
- exit 0
|