--- /dev/null
+#!/bin/sh
+set -e
+cd $(dirname "$0")
+
+PATTERN_TORRENTNAME=".*e4:name[0-9]+:(.+)12:piece length.*"
+PATTERN_DU_NONSUMMARY="^[[:graph:]]+[[:blank:]]+\.\/"
+PATTERN_DU_SIZE_NAME="^([[:graph:]]+)\t\.\/(.+)$"
+
+cd "${HOME}/session"
+HASHED_TITLES=
+FILENAMES_TORRENTS=$(ls *.torrent)
+for _FILENAME in ${FILENAMES_TORRENTS}; do
+    _HASH=$(printf '%s' "${_FILENAME}" | cut -d '.' -f 1)
+    _TITLE=$(cat -v "${_FILENAME}" | head -1 | sed -E "s/${PATTERN_TORRENTNAME}/\1/g")
+    HASHED_TITLES="${_HASH}:${_TITLE}\n${HASHED_TITLES}"
+done
+
+cd "${HOME}/downloads"
+SIZED_DOWNLOADS=$(du -ad1 -bh | grep -E "${PATTERN_DU_NONSUMMARY}" | sed -E "s/${PATTERN_DU_SIZE_NAME}/\1:\2/g")
+for _LINE in $(echo "${SIZED_DOWNLOADS}" | sed 's/ /REPLACED_WHITESPACE/g'); do
+    _LINE=$(printf '%s' "${_LINE}" | sed 's/REPLACED_WHITESPACE/ /g') 
+    _SIZE=$(printf '%s' "${_LINE}" | cut -d':' -f 1)
+    _DOWNLOAD=$(printf '%s' "${_LINE}" | cut -d':' -f 2-)
+    _FOUND=
+    for _LINE in $(echo "${HASHED_TITLES}" | sed 's/ /REPLACED_WHITESPACE/g'); do
+        _LINE=$(printf '%s' "${_LINE}" | sed 's/REPLACED_WHITESPACE/ /g') 
+        _HASH=$(printf '%s' "${_LINE}" | cut -d':' -f 1)
+        _TITLE=$(printf '%s' "${_LINE}" | cut -d':' -f 2-)
+        if [ "${_TITLE}" = "${_DOWNLOAD}" ]; then 
+            _FOUND=1
+            printf '%s' "${_HASH}"
+            break 
+        fi
+    done
+    if [ -z "${_FOUND}" ]; then
+        printf 'no_torrent_files'
+    fi 
+    printf ' %s %s\n' "${_SIZE}" "${_DOWNLOAD}"
+done
 
--- /dev/null
+#!/bin/sh
+set -e
+cd $(dirname "$0")
+. lib/abort
+. lib/abort_if_exists
+. lib/abort_if_offline
+. lib/expect_n_args
+. lib/path_tmp_timestamped
+
+prefixed_msg_init
+abort_if_offline
+
+BACKUPS_DIR="${HOME}/del/torrentexp"
+
+expect_n_args 1 2 'SERVER [SELECTION]' $@
+SERVER="$1"
+SELECTION="$2"
+
+OVERVIEW=$(ssh -t -q "${SERVER}" './print_torrents' | tr -d "\r")
+if [ -z "${SELECTION}" ]; then
+    prefixed_msg 'Available:'
+    for _LINE in $(echo "${OVERVIEW}" | sed 's/ /REPLACED_WHITESPACE/g'); do
+        _LINE=$(printf '%s' "${_LINE}" | sed 's/REPLACED_WHITESPACE/ /g') 
+        prefixed_msg "- ${_LINE}" 
+    done
+    exit 0
+fi
+LEN_SELECTION=$(printf '%s' "${SELECTION}" | wc -c)
+FOUND=
+for _LINE in $(echo "${OVERVIEW}" | sed 's/ /REPLACED_WHITESPACE/g'); do
+    _LINE=$(printf '%s' "${_LINE}" | sed 's/REPLACED_WHITESPACE/ /g') 
+    _LINE_START=$(printf '%s' "${_LINE}" | cut -c -${LEN_SELECTION}) 
+    if [ "${_LINE_START}" = "${SELECTION}" ]; then
+        HASH=$(printf '%s' "${_LINE}" | cut -d' ' -f 1) 
+        TITLE=$(printf '%s' "${_LINE}" | cut -d' ' -f 3-) 
+        FOUND=1
+        break
+    fi 
+done
+if [ -z "${FOUND}" ]; then
+    abort "No known hash starting with: ${SELECTION}"
+fi
+TARGET_DIR="${BACKUPS_DIR}/${TITLE}"
+abort_if_exists "${TARGET_DIR}"
+prefixed_msg "Downloading torrent files and content for: ${HASH} ${TITLE}"
+TMP_DIR=$(path_tmp_timestamped "${TITLE}")
+SESSION_DIR="${TMP_DIR}/session"
+DOWNLOAD_DIR="${TMP_DIR}/download"
+mkdir -p "${SESSION_DIR}"
+mkdir -p "${DOWNLOAD_DIR}"
+scp "${SERVER}:~/session/${HASH}"* "${SESSION_DIR}/"
+scp -r "${SERVER}:~/downloads/${TITLE}" "${DOWNLOAD_DIR}/"
+prefixed_msg "Storing in: ${TARGET_DIR}"
+mv "${TMP_DIR}" "${TARGET_DIR}"
+
+prefixed_msg_exit