summaryrefslogtreecommitdiff
path: root/misc/verify
diff options
context:
space:
mode:
authorTimmy Keller <tjk@tjkeller.xyz>2022-07-07 15:55:54 -0500
committerTimmy Keller <tjk@tjkeller.xyz>2022-07-07 15:55:54 -0500
commit38ebf64b07f99de9464905ee5f8aaee1148b6a4f (patch)
tree1617ef65c4bd54db8f48cf70122ef7b923c623ab /misc/verify
parent35a2dd3734f1d31060fe28837cf0e1d947c8d6f4 (diff)
downloadscripts-38ebf64b07f99de9464905ee5f8aaee1148b6a4f.tar.xz
scripts-38ebf64b07f99de9464905ee5f8aaee1148b6a4f.zip
tons of changes from when website was down
Diffstat (limited to 'misc/verify')
-rwxr-xr-xmisc/verify45
1 files changed, 33 insertions, 12 deletions
diff --git a/misc/verify b/misc/verify
index 5f0430c..1f0d4ab 100755
--- a/misc/verify
+++ b/misc/verify
@@ -4,11 +4,18 @@ CYN="\033[0;36m"
GRN="\033[0;32m"
RED="\033[0;31m"
+me="$(basename "$0")"
+
+concat="pv -EE -F'%r [%b] [%t] [%e] %p'"
+
printhelp() {
cat << HELPDOC
-Usage: $(basename "$0") [options] [file/directory]...
+Usage: $me [options] [file/directory]...
OPTIONS:
+ -o, --stdout Output checksum to STDOUT
+ -S, --supress Supress all warnings and progress notes (default with -o)
+ -n, --no-progress Don't output progress bar (default with -o & -S)
-m, --md5 Create/verify md5 checksum
-s[mode], --sha[mode] Create/verify sha[mode] checksum
-x[mode], --xxh[mode] Create/verify xxh[mode] checksum (default)
@@ -21,6 +28,9 @@ HELPDOC
crypt=xxh
while true; do
case "$1" in
+ -o|--stdout) stdout=1; nowarn=1; concat="cat" ;;
+ -S|--supress) nowarn=1; concat="cat" ;;
+ -n|--no-progressbar) concat="cat" ;;
-m|--md5) crypt=md5 ;;
-s*|--sha*) crypt=sha$(echo "$1" | tr -cd [:digit:]) ;;
-x*|--xxh*) crypt=xxh$(echo "$1" | tr -cd [:digit:]) ;;
@@ -35,6 +45,13 @@ done
hashalg=${crypt}sum
command -v $hashalg >/dev/null || (echo "Hashing algorithm '$hashalg' does not exist!" && exit 2)
+# Warn user
+if [ ! "$nowarn" ]; then
+ for file in "$@"; do
+ [ -d "$file" ] && echo "${RED}NOTE:${NORM} getting a checksum from an entire directory is NOT a standard feature in any other checksum-checking program! They can only be checked with this script!" && break
+ done
+fi
+
while [ -n "$1" ]; do
file="$1"
[ ! "`echo "$file" | sed "s/.$crypt$//"`" = "$file" ] && shift && continue # Skip hash files
@@ -43,20 +60,24 @@ while [ -n "$1" ]; do
hashfile="$file.$crypt"
[ -n "$verify" ] && [ ! -e "$hashfile" ] && shift && continue # Skip files without a hash in verify mode
- echo "Getting $crypt checksum of $type '$file'..."
- hash=`find "$file" -type f -print0 | sort -z | xargs -r0 pv -EE -F'%r [%b] [%t] [%e] %p' | $hashalg | cut -d' ' -f1`
+ [ ! "$nowarn" ] && echo "Getting $crypt checksum of $type '$file'..."
+ hash=`find "$file" -type f -print0 | sort -z | xargs -r0 $concat | $hashalg | cut -d' ' -f1`
- if [ -e "$hashfile" ]; then
- phash=`cat "$hashfile"`
- [ $phash = $hash ] \
- && echo "${GRN}Success: $type matches saved checksum!" \
- || (echo "${RED}Error: $type does not match saved checksum!\nExpected checksum: $phash\nActual checksum: $hash" && ec=1)
+ if [ "$stdout" ]; then
+ echo "$hash ($crypt) $file"
else
- echo $hash > "$hashfile" \
- && echo "${CYN}$crypt checksum file saved at '$hashfile'!" \
- || (echo "${RED}'$hashfile' could not be created!\n$crypt checksum of $type '$file' is $hash" && ec=1)
+ if [ -e "$hashfile" ]; then
+ phash=`cat "$hashfile"`
+ [ $phash = $hash ] \
+ && echo "${GRN}Success: $type matches saved checksum!" \
+ || (echo "${RED}Error: $type does not match saved checksum!\nExpected checksum: $phash\nActual checksum: $hash" && ec=1)
+ else
+ echo $hash > "$hashfile" \
+ && echo "${CYN}$crypt checksum file saved at '$hashfile'!" \
+ || (echo "${RED}'$hashfile' could not be created!\n$crypt checksum of $type '$file' is $hash" && ec=1)
+ fi
+ printf "$NORM"; [ -n "$2" ] && echo
fi
- printf "$NORM"; [ -n "$2" ] && echo
shift
done
exit $ec