![有没有办法恢复文件中断的 scp?](https://linux22.com/image/1313966/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E6%81%A2%E5%A4%8D%E6%96%87%E4%BB%B6%E4%B8%AD%E6%96%AD%E7%9A%84%20scp%EF%BC%9F.png)
我偶尔会通过 scp 下载非常大的文件,但每次都有可能出现连接中断并在中途切断传输的情况。
有办法恢复吗?
答案1
您可以尝试以下方法:而不是SCP使用日跳过已下载的部分并将剩余部分附加到文件中。
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh user@host "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
可能的优化:使用大块。我们把这留作家庭作业吧。
答案2
没有scp
。
如果两端都有,则可以使用它rsync -LvzP remoteserver:path/to/file localfile
来传输单个文件。
答案3
是的,有办法从中断点恢复,但使用 scp 是不可能的。sftp reget filename
做你需要的。Yarek 和 Grawity 提供了有效的解决方案,我对两者都 +1,但对于从中断点恢复,我喜欢 rsync。提供的示例命令都假设您正在将文件从远程服务器检索到本地工作站(下载)。请记住,最后两个参数应按顺序考虑 source_file 和 target_file。文件名的语法根据源文件或目标文件是本地的还是远程的而有所不同。如果我要发送(上传)[文本] 文件,我会将提供的示例重写为:
#从本地到远程 sofar =`ssh remote_system ls -lrupted_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
答案4
是的,如果两端都支持 sftp -scp remoteuser@remotehost:/absolute/filename .
失败后,您可以通过执行sftp remoteuser@remotehost
然后恢复reget /absolute/filename
下载来恢复。