我使用scp shell命令复制巨大的文件文件夹。
但是在某个时间点,我必须终止正在运行的命令(通过Ctrl + C或终止)。
据我了解,scp是按顺序复制文件的,因此应该只有一个部分复制的文件。
如何恢复相同的scp命令以不覆盖成功复制的文件并正确处理部分复制的文件?
PS我知道我可以在rsync中完成这种工作,但是由于某些原因,scp对我来说速度更快,因此我改用它。
dd
使用适当的skip
变量,然后输入ssh
:)
我使用scp shell命令复制巨大的文件文件夹。
但是在某个时间点,我必须终止正在运行的命令(通过Ctrl + C或终止)。
据我了解,scp是按顺序复制文件的,因此应该只有一个部分复制的文件。
如何恢复相同的scp命令以不覆盖成功复制的文件并正确处理部分复制的文件?
PS我知道我可以在rsync中完成这种工作,但是由于某些原因,scp对我来说速度更快,因此我改用它。
dd
使用适当的skip
变量,然后输入ssh
:)
Answers:
你应该rsync
用完ssh
rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path
关键选项是-P
,与--partial --progress
也可以使用其他选项,例如-a
(用于存档模式)和-z
(启用压缩)。
-r
。资料来源:lucasb.eyer.be/snips/rsync-skipping-directory.html
rsync -P -rsh remoteuser@remotehost:/remote/path /local/path
rsync的替代方法:
使用sftp
带有选项-r
(递归复制整个目录)和期权-a
中sftp
的get
命令来恢复现有文件部分转移。
先决条件:您的sftp
实现已经具有get
with -a
选项。
例:
将目录/foo/bar
从远程服务器复制到本地当前目录。目录bar
将在本地当前目录中创建。
echo "get -a /foo/bar" | sftp -r server
echo "put -a foo/bar" | sftp -r server:/foo
由于OpenSSH的6.3,你可以使用reget
命令在sftp
。
它具有与相同的语法get
,只是它从现有本地文件的末尾开始传输。
当rsync在最初运行良好的几秒钟后也停顿时,我得到了以下蛮力解决方案:
cat run_me.sh
#!/bin/bash
while [ 1 ]
do
rsync --partial --progress --rsh=ssh user@host:/path/file.tgz file.tgz &
TASK_PID=$!
sleep 60
kill $TASK_PID
sleep 2
done
昨天我遇到了同样的问题,通过scp转移了一个巨大的sql dump,我很幸运 wget --continue the_url
那篇博客文章很好地解释了它 http://www.cyberciti.biz/tips/wget-resume-broken-download.html