rsync创建新目录时未生成日期命名备份目录是否为预期行为?
为什么rsync在新增目录时不生成带日期的备份目录?
这确实是rsync的预期行为,核心原因和你使用的--backup相关参数的设计逻辑直接挂钩,咱们拆解一下具体场景:
1. rsync备份机制的核心逻辑
rsync的--backup(或短参数-b)功能,本质是为了保护目标端已存在的旧文件:只有当源端的操作会导致目标端的文件被修改、替换或删除时,rsync才会把目标端的旧版本文件移动到你指定的--backup-dir目录中。
简单说:没有需要被替换/删除的旧文件,就不会触发备份动作。
2. 不同操作的具体表现
新增源目录/文件的场景
当你在源目录新增内容时,目标端/backup/sample原本就没有对应的目录或文件,rsync只需要直接把新内容复制过去即可——没有任何旧文件需要被备份,自然不会生成带日期的sample-date...备份目录。
删除源文件的场景
当你删除源目录的某个文件时,目标端/backup/sample里还存在这个文件。rsync要执行删除操作前,会先把目标端的这个旧文件移动到--backup-dir指定的带日期目录中(这是你配置的动态日期参数生效的结果),所以这时候会生成对应的备份目录。
3. 如果想要每次同步都生成快照目录
如果你希望不管是新增、修改还是删除内容,每次同步都生成一个完整的带日期快照目录,rsync的--backup机制做不到这点。更合适的做法是先创建一个带日期的独立目录,再完整同步源内容到这个目录,同时可以维护一个指向最新备份的软链接:
# 示例脚本:生成带时间戳的完整快照 DATE=$(date +%Y%m%d-%H%M%S) TARGET_DIR="/backup/sample-$DATE" # 同步源目录到新的快照目录 rsync -a --delete /path/to/source/ "$TARGET_DIR" # 更新软链接指向最新快照 ln -snf "$TARGET_DIR" /backup/sample-latest
这样每次同步都会生成一个独立的快照,完整保留当时的源目录状态,方便回溯。
内容的提问来源于stack exchange,提问作者sebelk
相关产品推荐
相关产品推荐

