pthbs-download (1257B)
1 #!/bin/sh 2 if test -n "$pthbs_xtrace"; then 3 set -x 4 if test -n "$BB_ASH_VERSION"; then PS4="+${0##*/}"':${FUNCNAME}:${LINENO} '; fi 5 fi 6 test $# -gt 3 || exit 2 7 checksum_format=$1 8 checksum=$2 9 size=$3 10 shift 3 || exit 11 if test -z "$pthbs_cache"; then 12 printf '%s\n' >&2 "$0: fatal: pthbs_cache env var undefined or empty" 13 exit 100 14 fi 15 filename=$pthbs_cache/downloads/$checksum_format/$checksum 16 17 case $checksum_format in 18 (md5);; 19 (sha1);; 20 (sha256);; 21 (sha3);; 22 (sha512);; 23 (*) 24 printf>&2 "FATAL: unrecognized checksum format '%s'\n" "$checksum_format" 25 exit 1 26 ;; 27 esac 28 29 check() { 30 test -e "$filename" || return 1 31 ls -l "$filename" 32 find "$filename" -type f -size +"$size"c -delete 33 case $(find "$filename" -type f -size "$size"c -print) in 34 ($filename);; 35 (*) return 1;; 36 esac 37 if printf '%s %s\n' "$checksum" "$filename" | ${checksum_format}sum -c -; then 38 ln -sf "../../downloads/$checksum_format/$checksum" "$pthbs_cache/link/file-$checksum_format/" || exit 1 39 return 0 40 fi 41 rm -v "$filename" 42 exit 1 43 } 44 45 mkdir -p "$pthbs_cache/downloads/$checksum_format" || exit $? 46 47 if check; then 48 exit 0 49 fi 50 51 while test $# -gt 0; do 52 wget -cqO "$filename" -- "$1" 53 if check; then 54 exit 0 55 fi 56 shift 57 done 58 59 printf>&2 "FATAL: could not download file\n" 60 exit 1