rsync --delete-excluded --prune-empty-dirs와 함께 사용하지만 제외된 디렉터리만 정리합니다.

rsync --delete-excluded --prune-empty-dirs와 함께 사용하지만 제외된 디렉터리만 정리합니다.

저는 Windows 사용자 프로필을 원격 서버에 복제하기 위해 매일 밤 rsync를 사용해 왔습니다. 나는 --filter='merge <file>'arg를 사용하여 포함/제외 규칙으로 가득 찬 파일을 로드하는데, 이는 브라우저 캐시와 내가 아는 쓸모없는 기타 항목의 전송을 방지하는 데 사용됩니다. 또한 --prune-empty-dirs불필요한 빈 디렉토리가 많이 생성되는 것을 방지하기 위해 사용합니다 .

내 스크립트도 이 --delete-excluded스위치를 사용합니다. 이렇게 하면 제외할 항목을 더 많이 식별할 경우 해당 항목을 필터 파일에 추가할 수 있고 다음에 작업이 실행될 때 자동으로 제거되기 때문입니다.

그러나 이는 제거하는 부작용이 있습니다.모두빈 디렉토리. 애플리케이션이 잘못 작성되어 데이터를 쓰기 전에 디렉터리가 존재하는지 확인하지 않으면 문제가 발생할 수 있다는 걱정이 듭니다.

소스 측에서 실제로 비어 있는 디렉토리가 아닌 제외로 인해 비어 있는 디렉토리만 "가지치기"하는 방법이 있습니까? (관련된 디렉터리 수로 인해 디렉터리 이름을 명시적으로 지정하는 대신 간단한 규칙을 사용하여 이 작업을 수행하고 싶습니다.)

즉시 떠오르는 유일한 해결책은 다음과 같습니다.

  1. 단종된 디렉토리 --prune-empty-dirs와 추가 디렉토리가 허용됩니다.
  2. --delete-excluded야간 작업에서 사용을 중지 하고 필터 파일을 변경할 때마다 수동으로 --delete-excluded(사용하지 않고 ) 실행하십시오. 그러면 새 제외 항목이 제거되고 "실제" 빈 디렉터리가 다시 생성됩니다. --prune둘 다 이상적이지 않습니다.

답변1

제외 필터에 대한 제외로 인해 대상 측에서 비어 있는 디렉터리를 추가할 수 있습니다. 전체 디렉터리를 제외할 수 있으면 필터링 규칙이 더 간단해지고 --prune-empty-dirs필요하지 않을 수도 있습니다. 또는 원본 측에서 실제로 비어 있는 디렉터리에 대한 필터 목록에 보호 규칙을 추가할 수 있습니다. rsync 매뉴얼 페이지에서:

전역 "보호" 필터를 사용하면 특정 빈 디렉터리가 파일 목록에서 제거되는 것을 방지할 수 있습니다. 예를 들어, 이 옵션은 "emptydir" 디렉터리가 파일 목록에 남아 있는지 확인합니다.

--filter '빈 디렉토리 보호/'

Protect의 약식은 대문자로 표시되므로 P규칙은 다음과 같습니다.

P .stfolder

동기화가 .stfolder정리되지 않도록 보호합니다.

제외하거나 보호하려는 폴더를 특정 패턴을 사용하여 식별할 수 있는 경우가 아니면 규칙을 상당히 명시적으로 지정해야 하지만 이 두 가지 방법을 조합하면 원하는 결과를 얻을 수 있습니다. 내 경험에 따르면 rsync 규칙은 완전히 완전하지는 않지만 수년에 걸쳐 점차 개선됩니다.

관련 정보