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