LFTP

lftp is a much better version of ftp that can do parallel downloads and automatic recovery along with an interactive batch terminal that can be detached.

When having to download over 40 TB of data from this allowed me to write a bash script that would run in an idempotent way and download all the files for processing

Specifically the mirror option and the -c for continue and -P for maximum parallel connections to use

#!/bin/bash

while getopts s:d:r:c: option
do
case "${option}"
in
r) remotedir=${OPTARG};;
d) dir=${OPTARG};;
s) server=${OPTARG};;
c) connections=${OPTARG};;
esac
done
echo "Transfer remote directory: $remotedir"
local_folder="$dir/$remotedir"
echo "Transfer local directory $local_folder"
echo "Parallel connections $connections"

if [ ! -d $local_folder ]; then
  mkdir -p $local_folder;
  echo "Creating directory $local_folder"
fi
echo "FTP server: $server"
lftp -e "cd $remotedir; queue mirror -O $local_folder -c -P $connections -v; exit;" $server