如何使用部分复制的文件恢复scp?

时间:2014-10-16 18:16:33

标签: linux bash scp

我使用scp shell命令复制文件的大文件夹。

但是在某些时候我不得不杀死正在运行的命令(通过Ctrl + C或kill)。

我理解scp按顺序复制文件,因此应该只有一个部分复制的文件。

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

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

7 个答案:

答案 0 :(得分:97)

您应该rsync使用ssh

rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path

关键选项是 -P ,与--partial --progress

相同

也可以使用其他选项,例如-a(对于存档模式)和-z(以启用压缩)。

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

答案 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