2014-10-16 46 views
30

我使用scp shell命令来复制大文件夹的文件。如何使用部分复制的文件恢复scp?

但是在某个时间点,我不得不杀死运行命令(通过Ctrl + C或kill)。

为了我理解scp复制文件的顺序,所以应该只有一个部分复制的文件。

如何恢复相同的scp命令不覆盖成功复制的文件并正确处理部分复制的文件?

P.S.我知道我可以在rsync中做这种事情,但出于某种原因,scp对我来说会更快,我用它来代替。

+2

我怀疑Rsync是慢,因为它花费一些额外的时间做的事情,允许您RESTAR转移。你可能会考虑使用rsync来完成部分传输。 – 2014-10-16 18:22:44

+2

如果你想变得聪明,你总是可以通过适当的'skip'变量来尝试'dd',并通过管道输入到'ssh' :) – 2014-10-16 18:29:36

回答

55

您应该使用rsync超过ssh

rsync -P -e ssh [email protected]:/remote/path /local/path 

关键的选项是-P,这是一样的--partial --progress

其他选项,比如-a(归档模式),以及-z(启用压缩)也可以使用。

手册:https://download.samba.org/pub/rsync/rsync.html

+6

这不会恢复副本。恢复时缺少“-P”选项。 – Markus 2015-08-11 20:33:31

+7

只是想说明,rsync会恢复一个以scp开头的批处理副本。 – 2016-11-04 15:54:13

+1

你会得到“跳过目录”。错误,除非你也指定'-r'。资料来源:http://lucasb.eyer.be/snips/rsync-skipping-directory.html – 2017-02-12 11:15:33

9

另一种与rsync:

使用sftp与选项-r(递归复制整个目录)和sftpget命令的选项-a恢复现有的文件的部分转移。

先决条件:您的sftp执行已经有get-a选项。

示例:从远程服务器到本地的当前目录

复制目录/foo/bar。目录bar将在您当地的 当前目录中创建。

echo "get -a /foo/bar" | sftp -r server 
+1

你的解决方案非常棒,因为我的服务器不允许在ssh中登录,所以rsync doesn'工作。我需要上传而不是下载,所以这里是我的命令:'echo“put -a foo/bar”| sftp -r server:/ foo' – 2017-03-30 21:56:59

2

另一种可能性是试图挽救它档,当你已经开始了SCP。

ctrl + z为背景并停止它,然后ssh到接收服务器并登录,然后退出。现在fg scp进程,看它从'停止'恢复!

+0

没有为我工作。 – NateS 2016-08-07 04:16:45

+0

在Mac OS X上为我工作。感谢发布这篇文章,它今天保存了我的培根! – 2018-01-08 04:44:31

-2

我昨天得到了同样的问题,transfering一个巨大的SQL通过scp倾倒过来,我wget --continue the_url

很幸运,那博客文章解释很清楚: http://www.cyberciti.biz/tips/wget-resume-broken-download.html

+0

认为最佳做法是将网址中的相关部分复制到网站发生故障的答案中。 – Ryre 2017-04-10 11:53:58

0

当rsync的小摊夫妇后,以及秒的时候开始运行良好,我结束了以下蛮力解决方案:

cat run_me.sh 
#!/bin/bash 
while [ 1 ] 
do 
    rsync --partial --progress --rsh=ssh [email protected]:/path/file.tgz file.tgz & 
    TASK_PID=$! 
    sleep 60 
    kill $TASK_PID 
    sleep 2 
done