rsync가 비어 있지 않은 디렉토리를 삭제할 수 없습니다 있지 않기 때문에 할 수

원격 백업을 동기화 할 때 오류가 발생 rsync cannot delete non-empty directory합니다.

원인을 알고 있습니다. 일부 파일을 제외했으며 rsync가 로컬에 존재하지 않기 때문에 원격 디렉토리를 삭제하려고 할 때 비어 있지 않기 때문에 할 수 없습니다. 제외가 없으면 디렉토리가 비워집니다.

또한 –delete-excluded를 사용하여 문제를 해결할 수 있다는 것을 알고 있지만 원치 않습니다.

특정 파일의 업로드를 건너 뛰고 싶습니다 (파일이 너무 빠르기 때문에 이미 로컬에 존재하는 경우 이미 업로드 한 파일을 유지하려고 합니다) . 로컬로 존재하지 않으면 삭제해야합니다. –delete-excluded는 원격에서 모두 삭제합니다.

즉, 디렉토리가 더 이상 로컬로 존재하지 않는 경우 제외 된 파일이 포함되어 있어도 디렉토리를 삭제해야합니다.

이것을 달성하기 위해 rsync를 설정할 수 있습니까?



답변

p수정자를 사용하십시오 .

p는 규칙이 부패하기 쉬워서 삭제중인 디렉토리에서 무시됨을 나타냅니다. 예를 들어, “CVS”및 “* .o”와 같은 것을 제외하는 -C 옵션의 기본 규칙은 부패하기 쉬운 것으로 표시되며 소스에서 제거 된 디렉토리가 대상에서 삭제되는 것을 막지 않습니다.

예를 들어, -F“rsync에 계층 구조를 통해 뿌려진 디렉토리 별 .rsync-filter 파일을 찾고 전송 규칙에서 파일을 필터링하도록 지정합니다.”옵션을 사용합니다.

필자 .rsync-filter는 Mac이 남긴 “떨어짐”을 걸러 내기 위해 다음과 같은 줄을 포함합니다.

-p .DS_Store
-p ._*

사용하는 경우 exclude대신 단지 -, 쉼표를 추가합니다. 예를 들면 다음과 같습니다.

exclude,p .DS_Store
exclude,p Thumbs.db

답변

포함 / 제외 패턴의 수정자를 사용하고 사용한 패턴에 -s를 추가 할 수 있습니다. 송신 측에 대해서만 규칙을 제외하도록 rsync에 지시합니다.

-n : desc에서 삭제할 내용 만 확인하고 패턴을 삭제하지 마십시오. * .sh desc : / home / kg / tmp

목표 : desc에서 .sh의 파일 끝을 삭제하려고하지만이 작업을 수행하면 desc에서 삭제할 수 없습니다 : rsync -rvz –exclude * .sh –delete -n conkg kg@192.168.31.202 : / 홈 / kg / tmp

테스트로 테스트 할 때 -n을 추가하십시오 : rsync -rvz –exclude-from del.txt -n-삭제 conkg kg@192.168.31.202 : / home / kg / tmp 실제 삭제 : rsync -rvz- del.txt에서 제외 –conkg kg@192.168.31.202 삭제 : / home / kg / tmp cat del.txt -s * .sh

또는 : rsync -rvz –exclude -s * .sh –conkg kg@192.168.31.202 삭제 : / home / kg / tmp


답변

rsync의 ‘–max-size = xx’및 ‘–delete’옵션을 사용하십시오. 모든 것을 자동으로 수행하고 모든 요구 사항을 충족시킵니다.