2014-10-16 80 views
30

我使用scp shell命令來複制大文件夾的文件。如何使用部分複製的文件恢復scp?

但是在某個時間點,我不得不殺死運行命令(通過Ctrl + C或kill)。

爲了我理解scp複製文件的順序,所以應該只有一個部分複製的文件。

如何恢復相同的scp命令不覆蓋成功複製的文件並正確處理部分複製的文件?

P.S.我知道我可以在rsync中做這種事情,但出於某種原因,scp對我來說會更快,我用它來代替。

+2

我懷疑Rsync是慢,因爲它花費一些額外的時間做的事情,允許您RESTAR轉移。你可能會考慮使用rsync來完成部分傳輸。 – 2014-10-16 18:22:44

+2

如果你想變得聰明,你總是可以通過適當的'skip'變量來嘗試'dd',並通過管道輸入到'ssh' :) – 2014-10-16 18:29:36

回答

55

您應該使用rsync超過ssh

rsync -P -e ssh [email protected]:/remote/path /local/path 

關鍵的選項是-P,這是一樣的--partial --progress

其他選項,比如-a(歸檔模式),以及-z(啓用壓縮)也可以使用。

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

+6

這不會恢復副本。恢復時缺少「-P」選項。 – Markus 2015-08-11 20:33:31

+7

只是想說明,rsync會恢復一個以scp開頭的批處理副本。 – 2016-11-04 15:54:13

+1

你會得到「跳過目錄」。錯誤,除非你也指定'-r'。資料來源:http://lucasb.eyer.be/snips/rsync-skipping-directory.html – 2017-02-12 11:15:33

9

另一種與rsync:

使用sftp與選項-r(遞歸複製整個目錄)和sftpget命令的選項-a恢復現有的文件的部分轉移。

先決條件:您的sftp執行已經有get-a選項。

示例:從遠程服務器到本地的當前目錄

複製目錄/foo/bar。目錄bar將在您當地的 當前目錄中創建。

echo "get -a /foo/bar" | sftp -r server 
+1

你的解決方案非常棒,因爲我的服務器不允許在ssh中登錄,所以rsync doesn'工作。我需要上傳而不是下載,所以這裏是我的命令:'echo「put -a foo/bar」| sftp -r server:/ foo' – 2017-03-30 21:56:59

2

另一種可能性是試圖挽救它檔,當你已經開始了SCP。

ctrl + z爲背景並停止它,然後ssh到接收服務器並登錄,然後退出。現在fg scp進程,看它從'停止'恢復!

+0

沒有爲我工作。 – NateS 2016-08-07 04:16:45

+0

在Mac OS X上爲我工作。感謝發佈這篇文章,它今天保存了我的培根! – 2018-01-08 04:44:31

-2

我昨天得到了同樣的問題,transfering一個巨大的SQL通過scp傾倒過來,我wget --continue the_url

很幸運,那博客文章解釋很清楚: http://www.cyberciti.biz/tips/wget-resume-broken-download.html

+0

認爲最佳做法是將網址中的相關部分複製到網站發生故障的答案中。 – Ryre 2017-04-10 11:53:58

0

當rsync的小攤夫婦後,以及秒的時候開始運行良好,我結束了以下蠻力解決方案:

cat run_me.sh 
#!/bin/bash 
while [ 1 ] 
do 
    rsync --partial --progress --rsh=ssh [email protected]:/path/file.tgz file.tgz & 
    TASK_PID=$! 
    sleep 60 
    kill $TASK_PID 
    sleep 2 
done