多源场景下如何恢复rsync同步的文件?
多源场景下rsync反向恢复/同步的实现方法
好问题!当你用rsync把多个源目录同步到一个目标目录后,要反向将目标的内容推回所有源时,确实需要调整思路——毕竟rsync默认是单源到单/多目标的模式,反向多源的话得换个方式操作。下面给你拆解两种实用方法,还有关键注意细节:
方法一:逐个源手动/循环同步(最直观)
这是最直接的方式:遍历所有需要恢复的源目录,逐个执行反向rsync命令,把目标目录的内容同步过去。
比如你之前的正向同步命令是:
rsync -av /src1/ /src2/ /src3/ /dest/
现在要把/dest/的内容恢复到/src1/、/src2/、/src3/,可以手动执行:
# 同步回/src1/ rsync -av --delete /dest/ /src1/ # 同步回/src2/ rsync -av --delete /dest/ /src2/ # 同步回/src3/ rsync -av --delete /dest/ /src3/
如果源数量较多,写个简单的shell脚本循环处理更高效:
#!/bin/bash # 定义所有需要恢复的源目录数组 SOURCE_DIRS=("/src1/" "/src2/" "/src3/") # 目标备份目录 BACKUP_DIR="/dest/" # 遍历每个源目录执行同步 for dir in "${SOURCE_DIRS[@]}" do echo "正在将 ${BACKUP_DIR} 同步到 ${dir}..." rsync -av --delete "${BACKUP_DIR}" "${dir}" done
给脚本加执行权限后运行即可:chmod +x sync_back.sh && ./sync_back.sh
方法二:用xargs批量处理(适合大量源)
如果源目录数量非常多,比如几十上百个,可以把所有源路径写入一个文本文件,再用xargs批量调用rsync。
- 先创建一个源路径列表文件
src_list.txt,每行一个路径:
/src1/ /src2/ /src3/ /src4/
- 执行批量同步命令:
cat src_list.txt | xargs -I {} rsync -av --delete /dest/ {}
这里-I {}的作用是把文本里的每一行内容替换成{},然后逐个执行rsync命令,实现批量同步。
关键注意事项
- 路径末尾的斜杠:一定要注意
/dest/和/dest的区别——带斜杠表示同步/dest目录里的所有内容,不带斜杠会在目标源目录里创建一个新的dest子目录,这几乎不是你想要的结果,务必留意! --delete参数的取舍:这个参数会删除源目录里存在但目标目录没有的文件,保证源和目标完全一致。如果不想删除源里的独有旧文件,就去掉这个参数,但这样源目录会保留历史文件,和目标目录无法完全同步。- 保持属性一致:使用
-a参数(归档模式)会保留文件的权限、时间戳、软链接等属性,反向同步时建议和正向同步用相同的参数,避免属性丢失。 - 增量同步优势:rsync默认是增量同步,只会传输变化的文件,所以即使源数量多,也不会重复传输相同内容,效率很高。
内容的提问来源于stack exchange,提问作者fanix
相关产品推荐
相关产品推荐

