Более общий подход заключается в сборе информации о том, что находится на B, подтверждении того, что они все добрались до A, или продолжении вывода на пенсию, пока вы не получите их все.
что-то вроде
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
где mgetTargets и locaDirOutput будут определены для указания на файлы.
У меня действительно нет ресурсов или времени, чтобы сделать это точно, но, надеюсь, вы поняли идею.