
我偶爾會透過 scp 下載一個非常大的文件,每次連接斷開並中途切斷傳輸的可能性很小。
有辦法恢復嗎?
答案1
您可以嘗試以下方法:而不是SCP使用DD跳過下載的部分並將其餘部分附加到文件中。
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh user@host "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
可能的最佳化:使用大塊。讓我們把這個當作家庭作業吧。
答案2
沒有scp
。
如果兩端都有,則可以用來rsync -LvzP remoteserver:path/to/file localfile
傳輸單一檔案。
答案3
是的,有一些方法可以從中斷點恢復,但使用 scp 是不可能的。sftp reget filename
做你需要的。 Yarek 和 Grawity 提供了有效的解決方案,我對兩者都 +1,但為了從中斷點恢復,我喜歡 rsync。提供的範例命令均假設您正在將檔案從遠端伺服器檢索到本機工作站(下載)。請記住,最後兩個參數應依序視為 source_file 和 target_file。檔案名稱的語法會根據原始檔案或目標檔案是本機檔案還是遠端檔案而有所不同。如果我發送(上傳)[文字]文件,我會將提供的範例重寫為:
#從本地到遠端 sofar=`ssh 遠端系統 ls -l 中斷檔案 | awk '{print $5}'`; dd if=source_file bs=1 跳過=$sofar | ssh Remote_system“貓>>./interrupted_file”
對於 rsync 解決方案,我新增了-e ssh
.您應該考慮是否需要詳細資訊、壓縮、保留所有權、權限、時間戳記、遞歸目錄等。您可能希望符號連結保留為連結而不是引用它們。
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
答案4
是的,如果兩端都支援 sftp -scp remoteuser@remotehost:/absolute/filename .
失敗後您可以透過執行sftp remoteuser@remotehost
然後reget /absolute/filename
恢復下載。