У меня есть большой набор файлов на хосте B, и я пытаюсь записать эти файлы из оболочки хоста A (хост A разрешает доступ к оболочке, в то время как хост B не дает, но дает доступ по ftp). В середине работы соединение было потеряно, и только половина файлов на хосте B была перенесена на хост A. Я пытаюсь возобновить работу mget без перезаписи уже переданных файлов на хосте A, но не могу понять, как это сделать. Это. Есть идеи, ребята?

PS: mreget недоступен в оболочке хоста A

1 ответ1

0

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

У меня действительно нет ресурсов или времени, чтобы сделать это точно, но, надеюсь, вы поняли идею.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .