두 디렉터리를 비교합니다. 파일이 존재하지 않거나 동일하면 이동하고, 그렇지 않으면 아무 작업도 수행하지 않습니다.

두 디렉터리를 비교합니다. 파일이 존재하지 않거나 동일하면 이동하고, 그렇지 않으면 아무 작업도 수행하지 않습니다.

네 가지 유형의 파일이 있습니다.

  • 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.

관련 정보