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


10

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

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

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

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

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

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

답변:


5

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

0

포함 / 제외 패턴의 수정자를 사용하고 사용한 패턴에 -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


-2

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


대부분 해결 방법이 될 것입니다. mov, avi 및 cr2 파일은 일반적으로 매우 크기 때문에 완전히 건너 뛰고 싶습니다. 그러나 얼마 전에 이미 더 빠른 라인에 업로드 한 것을 유지해야합니다. 이제 문제는 가장 큰 JPG 파일이 가장 작은 CR2 파일보다 크기 때문에이 솔루션이 이상적이지 않다는 것입니다. 오히려 제외 기능을 사용하여 파일 이름을 필터링하고 싶습니다.
marlar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.