合并两个具有共同文件的目录

合并两个具有共同文件的目录

我有两个需要合并的目录:

  • B(底座),非常大
  • U(更新),大小适中,包含对B中文件的一些修改和添加

B和U都会定期更新。
我需要维护一个合并目录M,其中仅包含B和U中的文件,但是当两者都存在文件时,会选择U中的副本。当一个文件从两者中删除时,它也需要从 U 中删除。

更明确地说,如果文件位于:

  • 仅B:从B复制到M
  • 仅U:从U复制到M
  • B 和 U:从 U 复制到 M
  • B 和 U 都不是:从 M 中删除文件

目前公认的工作流程是删除M中的所有内容,然后复制B中的文件,然后复制U中的文件。这样既慢又麻烦。

mkdir -P M # ensure it exists
rm -rf M/* # ensure it's empty
rsync -r B/ M/ # copy in base files
rsync -r U/ M/ # copy over updates

我尝试通过一些 rsync 优化来加快速度

rsync -r --delete --checksum U/ B/ M/

据我了解,这将删除 M 中不在 B 或 U 中的所有文件,并更新 B 或 U 中更改的任何文件,并保留 M 中的任何其他文件不变,从而避免必须删除然后复制每个文件文件。
但是,我不知道如何指定 U 中的文件必须覆盖 B 中的匹配文件,即使 B 较新,这是一个关键要求。我认为参数的顺序可能会这样做,但显然不会。

有没有办法合并两个这样的目录,并在发生冲突时将一个源指定为首选?

(注:我意识到有几个类似的问题,但它们要么是与 rsync 无关或者不清楚要求是否和我的一样

相关内容