rsync를 사용하여 두 디렉터리와 해당 파일 내용을 비교하고 이를 새로운 빈 디렉터리로 전송하고 싶습니다. 그래서 저는 작은 POC를 만들었습니다.
OLD/
...main.js
NEW/
...main.js
CHANGES/
NEW와 OLD의 main.js 파일은 동일하며 동일한 체크섬을 갖습니다. 하지만 내가 사용할 때 :
rsync -rvcm --compare-dest=OLD/ NEW/ CHANGES/
main.js 파일은 여전히 CHANGES 폴더에 복사됩니다. 이런 일이 발생하지 않도록 하려면 어떻게 해야 하나요? 체크섬이 다른 파일만 복사하고 싶습니다.
답변1
--compare-dest=DIR
[…]
경로가 상대 경로 인 경우
DIR
대상 디렉터리를 기준으로 합니다. […]
(원천:man 1 rsync
)
당신의 명령에 따라
rsync -rvcm --compare-dest=OLD/ NEW/ CHANGES/
OLD/
상대 경로입니다. 대상 디렉터리는 입니다 CHANGES/
. OLD/
"대상 디렉터리에 상대적"은 실제로 CHANGES/OLD/
현재 작업 디렉터리에 상대적이라는 의미입니다. 이 디렉터리는 설정에 존재하지 않을 가능성이 높습니다. 존재하더라도 참조하는 디렉토리가 아닙니다.
OLD/
호출할 수 있는 현재 작업 디렉토리를 의미합니다 CHANGES/../OLD/
. 상대 부분 CHANGES/
은 ../OLD/
다음과 같습니다.
rsync -rvcm --compare-dest=../OLD/ NEW/ CHANGES/
CHANGES
디렉토리에 대한 심볼릭 링크인 경우 반드시 그런 것은 CHANGES/../
아닙니다 ./
(비교ls ..
Symlink 디렉터리에 있을 때 실제 상위 콘텐츠가 표시되는 이유는 무엇입니까?). 이 경우에는 CHANGES/../OLD/
의미하지 않습니다 OLD/
. --compare-dest=…
다음을 기반으로 논증을 구성하세요.물리적디렉토리 구조.
답변2
일반적으로 타임스탬프를 포함하고 체크섬 강제 적용을 중지하는 것이 좋습니다.
rsync -rtvm --compare-dest=OLD/ NEW/ CHANGES/
-a
Linux 기본 파일 시스템 간에 복사 하는 경우 -rt
.
로컬 복사본을 사용하고 있으므로( 동일한 시스템에 있는 NEW/
것으로 CHANGES/
보임) 체크섬을 사용하여 확인하는 것은 의미가 없습니다. 파일을 복사하는 것만으로도 속도는 거의 같습니다.