我使用scp shell命令复制文件的大文件夹。
但是在某些时候我不得不杀死正在运行的命令(通过Ctrl + C或kill)。
我理解scp按顺序复制文件,因此应该只有一个部分复制的文件。
如何恢复相同的scp命令以不覆盖成功复制的文件并正确处理部分复制的文件?
P.S。我知道我可以在rsync中做这种事情,但是由于某种原因scp对我来说更快,而是我用它来代替。
答案 0 :(得分:97)
您应该rsync
使用ssh
rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path
关键选项是 -P
,与--partial --progress
也可以使用其他选项,例如-a
(对于存档模式)和-z
(以启用压缩)。
答案 1 :(得分:21)
rsync的替代方案:
使用sftp
选项-r
(递归复制整个目录)和-a
sftp
get
命令的选项sftp
来恢复现有文件的部分传输。
先决条件:您的get
实施已经有-a
/foo/bar
选项。
示例:强>
将目录bar
从远程服务器复制到本地当前目录。目录echo "get -a /foo/bar" | sftp -r server
将在您的本地创建
当前目录。
{{1}}
答案 2 :(得分:7)
自OpenSSH 6.3起,您可以在sftp
中使用reget
command。
它具有与get
相同的语法,只是它从现有本地文件的末尾开始传输。
答案 3 :(得分:4)
另一种可能性是尝试挽救你在停止时已经开始的scp。
ctrl + z到后台并停止它,然后ssh到接收服务器并登录,然后退出。现在fg scp进程并观看它从'stalled'恢复!
答案 4 :(得分:1)
当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
答案 5 :(得分:0)
您可以使用-rsh
的{{1}}和-P
选项。 rsync
用于部分下载,-P
表示通过ssh协议传输。
完整的命令将是:
-rsh
答案 6 :(得分:-2)
我昨天遇到了同样的问题,通过scp转移了一个巨大的sql转储,我很幸运print NightTimeTemperatures.groupby('Month')[['AirTemperature','AirHumidity', 'SoilTemperature', 'SoilMoisture', 'LightIntensity', 'WindSpeed']].mean().reset_index()
Month AirTemperature AirHumidity SoilTemperature SoilMoisture \
0 1 23.571429 49.857143 23.285714 63.285714
LightIntensity WindSpeed
0 32.857143 2.142857
该博客文章很好地解释了这一点 http://www.cyberciti.biz/tips/wget-resume-broken-download.html