Bash 如何使用部分复制的文件恢复scp?
我使用scpshell命令复制巨大的文件夹文件 但在某个时候,我不得不终止正在运行的命令(通过Ctrl+C或kill) 据我所知,scp按顺序复制了文件,因此应该只有一个部分复制的文件 如何恢复相同的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选项一起使用“恢复现有文件的部分传输” 先决条件:您的
另外,我知道我可以用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
overssh
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
的同义词