네 가지 유형의 파일이 있습니다.
- JUST_SOURCE는 소스 디렉터리에만 존재합니다.
- JUST_TARGET은 대상 디렉터리에만 존재합니다.
- 원본 디렉터리와 대상 디렉터리 모두에 동일한 콘텐츠가 존재하며 체크섬도 동일합니다.
- 소스 및 대상 디렉토리에 DIFFERENT가 존재하지만 체크섬이 다릅니다.
나는 그들 각각에 대해 다음을 수행하고 싶습니다.
- JUST_SOURCE 대상으로 이동
- JUST_TARGET은 아무것도 하지 않습니다.
- 소스에서도 제거
- 아무것도 다르게 하지 마세요
명령줄에서 이 작업을 어떻게 수행할 수 있나요? 나는 성공하지 못한 채 많은 rsync 가능성을 시도했습니다.
답변1
해야 할 일은 두 가지입니다.
1) 파일이 source
없습니다 target
:
mv -n "$source"/* $target
-n
대상이 존재하는 경우 덮어쓰기를 방지하므로 모든 항목을 복사하면 mv -n
존재 확인이 자동으로 수행됩니다.
2) 의 파일은 target
의 파일과 동일합니다 source
. 의 파일을 삭제하세요.source
for tgt in $target/* ; do src="$source"/$(basename "$f") ; cmp "$tgt" "$src" && rm "$src" ; done
cmp
파일이 동일하면 0(true, bash의 경우)을 반환하고, 파일이 다르면 1(false)을 반환하므로 bash는 &&가 false인 경우(항상 false)의 첫 번째 항목만 평가하고 파일이 동일한 경우에는 false && anything
평가하지 않습니다 . 다르게 수행하십시오 rm
.