rsync: --delete-time --backup-dir=PATH --backup 不备份已删除的目录,以便为文件让路



使用 --backup --delete-during--backup-dir=PATH 选项运行 rsync 时,仅备份已删除的文件,但如果这些目录在删除时为空,则不会备份目录。 我看不到指定删除时不应从备份中修剪目录的选项。

例:

mkdir /tmp/test_rsync_delete
cd /tmp/test_rsync_delete
mkdir -p a/a/a/a/a
ln -s . a/b
mkdir -p b/a/a
ln -s a/a b/a
touch b/a/a/a
mkdir c
mkdir backup
rsync -avi --delete-during --backup --backup-dir=backup a/ c/
find backup/ -exec ls -ldi {} ;
# Should be empty
rsync -avi --delete-during --backup --backup-dir=backup b/ c/
find backup/ -exec ls -ldi {} ;
# Will be missing the directory that was deleted to make way for the file.

更新

根据上面的示例,当您运行它时,您会注意到空目录被 --delete 选项修剪/删除。 但是,在 --backup-dir 选项指定的目录中未备份相同的目录。 重要的不一定是目录,而是权限和所有权。 如果 rsync 在批处理模式 ( --read-batch ) 下运行时失败,那么您需要能够通过将系统恢复到以前的状态来回滚。 如果未备份目录,则它并没有真正创建要还原到的可靠点 - 它可能会丢失一些目录。

那么,为什么--backup选项系列在--delete选项系列要修剪空目录时不备份空目录呢?

这不是对特定问题的答案,但可能是其他人正在寻找什么的答案,最终在这里:

仅供参考:这是我发现此问题时正在搜索的内容:

rsync -av --delete-after src dest
-

av "-a"表示存档。 这将保留符号链接、权限、时间戳、组/所有者,并且将是递归的。"v"使作业变得冗长。 这不是必需的,但您可以看到 rsync 发生了什么,以便您知道您是否做错了什么。
--删除后将告诉 rsync 将目标与源进行比较,并在 rsync 完成后删除任何无关的文件。 这是一个危险的选择,因此请谨慎使用。

最新更新