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

Bash 如何使用部分复制的文件恢复scp?,bash,rsync,scp,resume,Bash,Rsync,Scp,Resume,我使用scpshell命令复制巨大的文件夹文件 但在某个时候,我不得不终止正在运行的命令(通过Ctrl+C或kill) 据我所知,scp按顺序复制了文件,因此应该只有一个部分复制的文件 如何恢复相同的scp命令以不覆盖成功复制的文件并正确处理部分复制的文件? 另外,我知道我可以用rsync做这类事情,但出于某种原因,scp对我来说更快,我用它来代替它。rsync的替代方案: 将sftp与-r选项(递归复制整个目录)和sftp的get命令的-a选项一起使用“恢复现有文件的部分传输” 先决条件:您的

我使用scpshell命令复制巨大的文件夹文件

但在某个时候,我不得不终止正在运行的命令(通过Ctrl+C或kill)

据我所知,scp按顺序复制了文件,因此应该只有一个部分复制的文件

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


另外,我知道我可以用rsync做这类事情,但出于某种原因,scp对我来说更快,我用它来代替它。

rsync的替代方案:

sftp
-r
选项(递归复制整个目录)和
sftp
get
命令的
-a
选项一起使用“恢复现有文件的部分传输”

先决条件:您的
sftp
实现已经有了
get
-a
选项

示例:

将目录
/foo/bar
从远程服务器复制到本地当前目录。目录
bar
将在本地 当前目录

echo "get -a /foo/bar" | sftp -r user@remote_server

您应该使用
rsync
over
ssh

rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path
关键选项是
-p
,它与
--部分--进度

默认情况下,如果传输中断,rsync将删除任何部分传输的文件。在某些情况下,更希望保留部分传输的文件。使用--partial选项告诉rsync保留部分文件,这将使文件其余部分的后续传输更快

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


手册:

另一种可能是尝试修复已启动的scp(当它停止时)


ctrl+z切换到后台并停止,然后ssh切换到接收服务器并登录,然后退出。现在完成scp进程,并观察它从“暂停”状态恢复

我昨天也遇到了同样的问题,通过scp传输了一个巨大的sql转储,我很幸运地使用了
wget——继续这个url

那篇博文很好地解释了这一点 基本上:

wget --continue url

当rsync在最初正常运行的几秒钟后停止时,我使用以下暴力解决方案来启动和停止每60秒重新启动下载:

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

自OpenSSH 6.3以来,您可以在
sftp
中使用

它的语法与
get
相同,只是它从现有本地文件的末尾开始传输

echo "reget /file/path" | sftp -r user@server_name

同样的效果是
-a
切换到or。

您可以使用
rsync
-rsh
-p
选项
-P
用于部分下载,而
-rsh
表示传输是通过ssh协议进行的

完整的命令是:
rsync-P-rshremoteuser@remotehost:/remote/path/local/path

我怀疑rsync速度较慢,因为它会花费一些额外的时间来完成允许您重新启动传输的操作。你可以考虑只使用RSyc来完成部分传输。如果你想聪明,你可以尝试使用< <代码>跳过变量,并尝试使用<代码> SSH :它属于超级用户,而且确实如此。rsync在默认情况下使用ssh,通常情况下,rsync被配置为默认使用ssh,因此…它应该同样快(尽管它首先列出目录,这可能会让启动速度变慢),只是想注意,rsync将恢复使用scp启动的批处理拷贝。您会得到“正在跳过目录。错误,除非您还指定了
-r
。资料来源:为我工作,但我添加了--也添加了。。。。rsync-P--append-eshremoteuser@remotehost:/remote/path/local/path@CraigAnderson这是被遗漏的重要一点。答案听起来像是建议下载应该从rsync开始。答案中给出的选项对我不起作用,但确实如此:
rsync-P-rshremoteuser@remotehost:/remote/path/local/path
您的解决方案很棒,因为我的服务器不允许在ssh中登录,所以rsync无法工作。我需要上传而不是下载,因此下面是我的命令:
echo“put-a foo/bar”| sftp-r server:/foo
这似乎是恢复部分下载文件的可行选项,因为rsync似乎对ssh不太友好(使用非默认端口)。这被认为是最好的做法,将url中的相关部分复制到答案中,以防网站宕机。我正在尝试上载,因此没有wget。在Mac OS X上为我工作。感谢您发布此消息,今天它为我节省了时间!踢那个网络看看它是否能自我恢复:)和jordi的答案一样?这是哪个版本的rsync?我的相对现代的版本(rsync版本3.1.2协议版本31)没有带单个破折号的
-rsh
选项,只有
--rsh=COMMAND
,手册上说它是
-e COMMAND
的同义词