Answers:
您可以尝试以下方法:使用dd代替scp跳过下载的部分,并将其余部分追加到文件中。
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
可能的优化:大块工作。让我们将其留作家庭作业。
dd
具有小块大小可能会很慢(此处仅为350 kB / s)。幸运的是,scp
传输似乎以1024字节为单位。如果是这样你的文件(或者,通过将其截断到最近的1024字节块),可以加速这一过程是这样的:ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
。(请注意,$sofar
然后必须是要跳过的1024个字节块!)
rsys
第二行只是一个示例主机名,而不是的一些特殊参数ssh
。我建议您将其替换user@host
为避免混淆。
是的,有多种方法可以从中断点恢复,但是使用scp是不可能的。sftp reget filename
做你所需要的。Yarek和Grawity提供了对我+1都有效的有效解决方案,但是为了从中断的角度恢复,我喜欢rsync。提供的示例命令均假设您正在从远程服务器检索文件到本地工作站(下载)。请记住,应该按顺序将最后两个参数视为source_file和target_file。文件名的语法取决于源文件还是目标文件是本地文件还是远程文件。如果我正在发送(上传)[文本]文件,则将重写以下示例:
#从本地到远程 sofar =`ssh remote_system ls -l interrupted_file | awk'{print $ 5}'`; dd if = source_file bs = 1 skip = $ sofar | ssh remote_system“猫>> ./interrupted_file”
在rsync解决方案中,我添加-e ssh
。您应该考虑是否需要冗长,压缩,保留所有权,权限,时间戳,递归目录等。有关-L参数,请查看手册页和google。您可能希望符号链接保留为链接,而不是引用它们。
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file