マージする必要がある2つのディレクトリがあります。
- B(ベース)、非常に大きい
- U(更新済み):適切なサイズであり、Bのファイルに対するいくつかの修正と追加が含まれています。
BとUの両方が定期的に更新されます。
BとUのファイルのみを含むマージされたディレクトリMを保持する必要がありますが、両方のファイルにファイルがある場合は、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/
私が理解したところによれば、BまたはUにないMのすべてのファイルが削除され、BまたはUで変更されたファイルはすべて更新され、Mの他のファイルは変更されていないままであるため、削除や操作を避けることができます。次に、すべてのファイルをコピーします。
しかし、Bが最新の場合でも、UのファイルがBの一致するファイルを上書きするように指定する方法がわかりません。これが重要な要件です。私はパラメータの順序がそうすることができると思いましたが、明らかにそうではありませんでした。
2つのディレクトリをマージし、競合が発生した場合に1つのソースをデフォルトソースとして指定する方法はありますか?
(注:似たような質問がいくつかあることを知っていますが、どちらかです。rsyncとは関係ありません。または要件が私と同じかどうかはわかりません。)