Scp
scp 會丟包嗎?
上週我嘗試將 200 MB 的文件傳輸到遠端電腦。然後我得到了一個 30 MB 的文件。今天我嘗試對整個目錄進行 scp,但失去了大量文件。
scp正常嗎?如何防止這種情況?
編輯:
我為 scp 文件編寫了一個期望腳本,它可能相關嗎?
這個腳本很簡單:
#!/usr/bin/expect set file [lindex $argv 0]; set ip [lindex $argv 1]; spawn scp -r $file $ip expect { "*password*" {send "password\r"} "*(yes/no)?*" {send "yes\r";exp_continue} } expect eof
沒有錯誤消息,只是沒有複製失去的文件。
Scp 不能保證複製會正確發生。沒有任何軟體可以保證正確複製。總有可能出現電源或網路中斷、源文件無法讀取、目標卷已滿等情況。
一個文件拷貝軟體最多能做的就是保證當它退出時,要麼拷貝正確,要麼軟體報錯。檢查錯誤的可靠方法是檢查程序的返回狀態:0 表示成功,任何其他值表示錯誤。scp 與任何半途而廢的程序一樣,在成功時返回 0,在失敗時返回非零值。
您的 expect 腳本不檢查 的返回狀態
scp
,因此您無法知道 scp 是否告訴您複製成功。Expect 在這裡不是一個有用的工具。你真的應該使用公鑰認證。如果您真的,真的無法設置密鑰,請使用sshpass而不是自己滾動。
此外,您應該使用rsync而不是 scp。Rsync 有一個主要優勢:如果一個副本被中斷,你可以再次執行它,它會從中斷的地方開始。請務必告訴它保留時間戳以及其他元數據,除非您有充分的理由不:
rsync -a SOURCE/ DESTINATION/