rsync --delete가 작동하지 않습니다

rsync --delete가 작동하지 않습니다

운영 체제는 Debian 10, rsync 버전 3.1.3입니다. 나는 다음과 같이 rsync를 실행합니다.

time rsync -ar --delete --info=progress2 --files-from=filelist.txt . /path/to/dest

이렇게 하면 파일이 복사되지만 삭제된 콘텐츠는 제거되지 않습니다. (src에서 완전히 제거되거나 제 경우에는 filelist.txt에서 제거되거나) 이것은 큰 문제입니다. 내가 찾은 유일한 해결 방법은 단순히 전체 대상을 삭제하고 모든 것을 다시 복사하는 것입니다. 그러나 이 방법은 시간이 많이 걸리고 기본적으로 처음에 rsync를 사용하는 요점을 무효화합니다.

이것은 버그입니까? --delete 플래그를 존중하여 rsync가 올바르게 작동하도록 하려면 어떻게 해야 합니까?

편집하다:

예를 들어:

  • filelist.txt에 "foo"가 포함되어 있으면 /path/to/dest에 "foo"가 포함됩니다.
  • filelist.txt에 "foo"와 "bar"가 포함되어 있으면 /path/to/dest에 "foo"와 "bar"가 포함됩니다.
  • filelist.txt에 "foo", "bar" 및 "bat"가 포함되어 있으면 /path/to/dest에는 "foo", "bar" 및 "bat"가 포함됩니다.

"foo", "bar", "bat" 등이 디렉토리라고 가정합니다.

답변1

누락된 매개변수를 제거하려면 rsync에 지시해야 합니다.

rsync -arv --delete-missing-args --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
  • 따라서 디렉토리를 삭제하면 디렉토리도 삭제 foo됩니다 ./path/to/dest--delete-missing-args
  • foo여전히 포함되어야 합니다 filelist.txt.
  • 이 매개변수는 rsync가 폴더의 파일을 --delete삭제하도록 허용하는 데 필요합니다.foo

답변2

습관. rsync파일 목록에 해당 파일이 없거나 비어 있기 때문에 파일/디렉터리는 삭제 되지 않습니다 .

이를 사용하는 경우 --files-from소스에서 대상으로 나열된 파일만 동기화를 시도합니다.

전달된 파일 목록에 파일이 존재하지 않는다고 해서 파일이 삭제되지는 않습니다 --files-from.

--delete 작업을 수행하려면 실제 소스 경로를 사용해야 합니다. 이와 같이

rsync -ar --delete path/to/src path/to/destination 

관련 정보