我在主机 B 中有大量文件,我正尝试从主机 A 的 shell 中获取这些文件(主机 A 允许 shell 访问,而主机 B 不允许但允许 ftp 访问)。在工作过程中,连接丢失,主机 B 中只有一半的文件被传输到主机 A。我试图在不覆盖主机 A 中已传输的文件的情况下恢复获取文件,但不知道该怎么做。大家有什么想法吗?
PS:主机 A 的 shell 中没有 mreget
答案1
更通用的方法是捕获有关 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 将被定义为指向文件。
我确实没有资源或时间来实现这一点,但希望你能明白我的想法。