有没有办法恢复文件的中断 scp?

GJ.*_*GJ. 17 linux file-transfer scp

我偶尔会通过 scp 下载一个非常大的文件,每次连接中断和中途切断传输的可能性很小。

有没有办法恢复它?

use*_*686 17

随着scp,没有。

如果两端都有,就可以rsync -LvzP remoteserver:path/to/file localfile用来传输单个文件。


小智 13

您可以尝试以下方法:代替scp使用dd跳过下载的部分并将其余部分附加到文件中。

sofar=`ls -l ./destfile | awk '{print $5}'`
ssh user@host "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Run Code Online (Sandbox Code Playgroud)

可能的优化:使用大块。让我们把它作为家庭作业。

  • 我花了一些时间才意识到第二行中的 `rsys` 只是一个示例主机名,而不是 `ssh` 的一些特殊参数。我建议您将其替换为 `user@host` 以避免混淆。 (5认同)

Dan*_*ton 7

是的,有一些方法可以从中断点恢复,但是使用 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 "cat >> ./interrupted_file"

对于 rsync 解决方案,我添加了-e ssh. 您应该考虑是否需要详细、压缩、保留所有权、权限、时间戳、递归目录等。检查手册页和谷歌,关于 -L 参数。您可能希望符号链接保留为链接而不是引用它们。

rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file


kno*_*cte 6

还有另一种解决方案(除了此处所述的rsyncordd解决方案),令我惊讶的是没有人提到:它reputsftp.


小智 5

是的,如果两端都支持 sftp -scp remoteuser@remotehost:/absolute/filename .失败后您可以通过执行sftp remoteuser@remotehost然后reget /absolute/filename恢复下载。