두 개의 디렉토리를 공통 파일과 병합

두 개의 디렉토리를 공통 파일과 병합

병합해야 할 두 개의 디렉터리가 있습니다.

  • 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의 일치하는 파일을 덮어쓰도록 지정하는 방법을 모르겠습니다. 이것이 핵심 요구 사항입니다. 나는 매개변수의 순서가 그렇게 할 수 있다고 생각했지만 분명히 그렇지 않았습니다.

두 개의 디렉토리를 병합하고 충돌이 발생할 경우 하나의 소스를 기본 소스로 지정하는 방법이 있습니까?

(참고: 비슷한 질문이 여러 개 있다는 것을 알고 있지만 둘 중 하나입니다.rsync와 관련이 없습니다.또는요구 사항이 나와 같은지 확실하지 않습니다.)

관련 정보