#!/bin/sh set -e pid_file="/tmp/${0##*/}.pid" if [ -f "${pid_file}" ] \ && kill -0 "$(cat "${pid_file}")" >/dev/null 2>&1; then >&2 printf 'another %s is running as %s\n' "${0##*/}" "$(cat "${pid_file}")" exit fi echo $$ \ > "${pid_file}" trap 'rm "${pid_file}"' EXIT if ! tty -s; then sleep $((${RANDOM} % 3600)) fi cache_dir=$(readlink -e "$(dirname "$0")/../httpdocs") mkdir -p \ "${cache_dir}/md5sum" \ "${cache_dir}/sha1sum" \ "${cache_dir}/sha256sum" \ "${cache_dir}/sha512sum" grep '^[^#]' "$(dirname "$0")/downloads.list" | \ while read -r url urlDir; do if [ -n "${urlDir}" ] || \ echo "${url}" | \ grep -q '\*[^/]*$'; then if [ -z "${urlDir}" ]; then urlDir=$( printf '%s\n' "${url}" | \ sed 's|/[^/]*$|/|' ) urlPrefix="${urlDir}" urlFile="${url##*/}" spacer='/' else urlPrefix=$( printf '%s\n' "${url}" | \ sed ' s,\([^/]/\)[^/].*$,\1, ' ) urlFile="/${url#*//*/}" spacer='' fi urlFile=$( printf '%s\n' "${urlFile}" | \ sed ' s|\.|\\.|g s|*|.*|g ' ) wget --no-check-certificate -O - "${urlDir}" 2> /dev/null | \ tr '"<>'"${spacer}" '\n' | \ grep '\(^\|/\)'"${urlFile}\$" | \ sort -u | \ xargs -r printf "${urlPrefix}%s\n" else printf '%s\n' "${url}" fi done | \ while read -r url; do if ! wget --no-check-certificate -O "${cache_dir}/tmp" "${url}" 2> /dev/null; then continue fi sha512=$( sha512sum "${cache_dir}/tmp" | \ cut -d' ' -f1 ) sha256=$( sha256sum "${cache_dir}/tmp" | \ cut -d' ' -f1 ) sha1=$( sha1sum "${cache_dir}/tmp" | \ cut -d' ' -f1 ) md5=$( md5sum "${cache_dir}/tmp" | \ cut -d' ' -f1 ) if [ ! -f "${cache_dir}/sha512sum/${sha512}" ]; then mv "${cache_dir}/tmp" "${cache_dir}/sha512sum/${sha512}" else rm "${cache_dir}/tmp" fi if [ ! -f "${cache_dir}/sha256sum/${sha256}" ]; then ln "${cache_dir}/sha512sum/${sha512}" "${cache_dir}/sha256sum/${sha256}" fi if [ ! -f "${cache_dir}/sha1sum/${sha1}" ]; then ln "${cache_dir}/sha512sum/${sha512}" "${cache_dir}/sha1sum/${sha1}" fi if [ ! -f "${cache_dir}/sha1sum/${md5}" ]; then ln "${cache_dir}/sha512sum/${sha512}" "${cache_dir}/sha1sum/${md5}" fi done