我正在使用下面的命令跨伺服器傳輸文件
scp -rc blowfish /source/directory/* [email protected]:/destination/directory
update
有沒有辦法像指令一樣只傳輸修改過的檔案cp
?
答案1
rsync
是你的朋友。
rsync -ru /source/directory/* [email protected]:/destination/directory
如果您希望它刪除目標中不再存在於來源中的文件,請新增該--delete
選項。
答案2
一般來說,人們要求 scp 是有原因的。即無法在目標上安裝 rsyncd。
files=`find . -newermt "-3600 secs"`
for file in $files
do
sshpass -p "" scp "$file" "root@$IP://usr/local/www/current/$file"
done
答案3
另外一個選擇:
remote_sum=$(ssh ${remote} sha256sum ${dest_filename})
remote_sum=${remote_sum%% *}
local_sum=$(sha256sum ${local_filename})
local_sum=${local_sum%% *}
if [[ ${local_sum} != ${remote_sum} ]]; then
scp ${local_filename} ${remote}:${remote_filename}
fi
這對於一個檔案來說還可以,但對於大量檔案來說會有點慢,這取決於 SSH 重複連接的速度。如果您在 SSH 連線上設定了 controlmasters,那可能還不錯。如果您需要遞歸複製一段目錄樹,您可以執行一個 SSH 指令,對所有檔案進行求和,將結果推入 bash 關聯數組,在本機上執行相同操作,然後比較檔案總和來決定是否做副本。但幾乎可以肯定的是,在遠端安裝 rsync 會更容易。