Uma abordagem mais genérica seria capturar informações sobre o que está em B, confirmar que todos chegaram a A ou continuar tentando até conseguir todas.
algo como
until ${allFilesTransfered:-false} ; do
# get in file list of remote Files
ftp -in > ${mgetTargets} <<-EOS
open ${RemoteHost}
$passwd
cd $remoteDir
ls ${fileSpec}*
quit
EOS
# transport files with mget
ftp -in <<-EOS
open ${RemoteHost}
$passwd
prompt
binary
cd $remoteDir
lcd $localDir
mget $( cat mgetTargets )
quit
EOS
# make a tmp file with files that are
# now on your local machine
cd $localDir
ls -l > ${localDirOutput)
# compare the 2 lists with diff,
# if not diffs, then all files were copied
diffOut="$(diff - ${localDirOutput} ${mgetTargets})"
case "${diffOut:-no_outputFound}" in
no_outputFound ) allFilesTransfered=true ;;
esac
done
onde mgetTargets e locaDirOutput seriam definidos para apontar para arquivos.
Eu realmente não tenho recursos ou tempo para fazer isso com exatidão, mas espero que você tenha a idéia.