我有两个需要合并的目录:
- 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 无关或者不清楚要求是否和我的一样)