You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何让Bash脚本仅同步更新后的目录至多台服务器

实现驱动目录的增量同步方案

问题分析

你当前脚本里的--ignore-existing参数会直接跳过目标服务器上已存在的文件,不管源文件是否有更新,这不符合“仅同步更新过的内容”的需求。而rsync本身就具备增量同步的能力,只需要调整参数即可实现。

修改后的脚本

#!/bin/bash
# 源目录
source_directory="/images/drivers"

# 远程服务器用户名
remote_user="username"

# 远程服务器IP数组
remote_servers=("10.xx.xx.xxx" "10.xx.xx.xxx")

# 远程服务器目标目录
destination_directory="/images/drivers"

# 指定复制后目录的用户和组权限
ownership="name:name"

# 循环同步到每台远程服务器
for server in "${remote_servers[@]}"; do
        rsync -avz --delete --chown="$ownership" "$source_directory/" "$remote_user@$server:$destination_directory/"
done

参数说明

  • -a:归档模式,等同于-rlptgoD,会保留文件权限、所有者、时间戳等元数据,同时递归同步目录
  • -v: verbose模式,显示同步过程的详细信息,方便排查问题
  • -z:传输时压缩数据,节省网络带宽(如果服务器之间网络带宽充足,可去掉该参数提升同步速度)
  • --delete:删除目标端存在但源端已删除的文件/目录(如果不需要同步删除操作,可直接去掉该参数)
  • --chown="$ownership":设置同步后文件的所有者和组,保持权限一致性

额外说明

  • rsync默认会对比源文件和目标文件的修改时间和文件大小,只同步有变化的文件,天然实现增量同步
  • 如果需要更精准的内容对比(比如文件内容被修改但时间戳未更新的场景),可以添加--checksum参数,基于文件哈希值判断是否同步,但会增加CPU消耗,按需使用即可

内容的提问来源于stack exchange,提问作者SaStubbs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:33:13