我正在使用以下命令跨服务器传输文件
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 连接上设置了控制主机,情况可能不会太糟。如果您需要递归复制一棵目录树,您可以执行一个 SSH 命令,对所有文件进行求和,将结果推送到 bash 关联数组中,在本地主机上执行相同操作,然后比较文件总和以决定是否进行复制。但在远程安装 rsync 几乎肯定更容易。