
Hi, Below is the actual code that I am using FWIW, I don't claim it is perfect, but it does the job of collecting the WinSCP files of a release, as well as compiling checksum files from the release's readme file. The format of the readme file has been constant for quite some time (if not since it was first devised). The files I want haven't changed either. Of course it would be easier if they released proper md5sum, sha1sum and sha256sum files so that I didn't need to construct them. The download version is within the file name of the shell script. I could just as easily use the directory name to determine the version though. Basically I create a directory, copy in or hard link the file from "last time", adjust it if necessary (name at least) and run it. The script seems to be quite effective in getting all the files and confirming they are valid according to the checksums provided in the readme. I actually haven't used WinSCP itself for a while now as I only use Windows for very few things these days (aside from when I am working on other people's machines providing IT support services). Cheers A. $ cat get-files--5.9.5.sh #!/bin/bash set -eu get_files() { for TARGET_FILE in ${files_to_download} do while [ ! -f "${TARGET_FILE}" ] do FILE_URL="${URL_BASE}/download/${TARGET_FILE}" CURL_SAVE_FILE="${TARGET_FILE}--curl-ILs.out" curl -ILs "${FILE_URL}" | \ tr -d "\r" | \ tee "${CURL_SAVE_FILE}" FINAL_DOWNLOAD_URL=$( grep -i ^Location: "${CURL_SAVE_FILE}" | \ tail -1 | \ cut -d" " -f2 ) [[ -z "${FINAL_DOWNLOAD_URL}" ]] && \ FINAL_DOWNLOAD_URL="${FILE_URL}" echo " -------------------------------------------" echo " File URL: ${FILE_URL}" echo "Final Download URL: ${FINAL_DOWNLOAD_URL}" echo wget -c "${FINAL_DOWNLOAD_URL}" echo done done return 0 } make_checksum_files() { declare -a files_with_checksums checksums files_with_checksums=( $( grep ^W "${README_FILE}" | tr -d "\r" ) ) for sum_type in MD5 SHA-1 SHA-256 do checksums=( $( grep "${sum_type}" "${README_FILE}" | \ tr -d "\r" | \ cut -d" " -f4 ) ) case "${sum_type}" in MD5) OUT_FILE=md5sums ;; SHA-1) OUT_FILE=sha1sums ;; SHA-256) OUT_FILE=sha256sums ;; esac for ((i=0;i<${#files_with_checksums[@]};i++)) do printf "%s %s\n" \ "${checksums[${i}]}" \ "${files_with_checksums[${i}]}" done | tee "${OUT_FILE}" touch -r "${README_FILE}" "${OUT_FILE}" echo done return 0 } FN=$0 echo "${FN}" # Strip prefix up to double dash VER=${FN#*--} URL_BASE=https://winscp.net/ # Strip suffix .sh VER=${VER%%.sh} files_to_download=" WinSCP-${VER}-Automation.zip WinSCP-${VER}-Portable.zip WinSCP-${VER}-ReadMe.txt WinSCP-${VER}-Setup.exe WinSCP-${VER}-Source.zip " ( echo echo "WinSCP Website: ${URL_BASE}" echo echo "-- download version: $VER" echo get_files echo " -------------------------------------------" README_FILE=WinSCP-${VER}-ReadMe.txt [ -f "${README_FILE}" ] || { echo Missing "${README_FILE}" exit } echo cat "${README_FILE}" echo echo make_checksum_files echo echo for sum_file in md5sums sha1sums sha256sums do [ -f "${sum_file}" ] || { echo missing "${sum_file}" exit } echo checking "${sum_file}" .... ${sum_file:0:(-1)} -c "${sum_file}" echo done echo chown -R andrewm:andrewm . ls -lart ) 2>&1 | tee "$(basename "$0")".out