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