저는 Windows 사용자 프로필을 원격 서버에 복제하기 위해 매일 밤 rsync를 사용해 왔습니다. 나는 --filter='merge <file>'
arg를 사용하여 포함/제외 규칙으로 가득 찬 파일을 로드하는데, 이는 브라우저 캐시와 내가 아는 쓸모없는 기타 항목의 전송을 방지하는 데 사용됩니다. 또한 --prune-empty-dirs
불필요한 빈 디렉토리가 많이 생성되는 것을 방지하기 위해 사용합니다 .
내 스크립트도 이 --delete-excluded
스위치를 사용합니다. 이렇게 하면 제외할 항목을 더 많이 식별할 경우 해당 항목을 필터 파일에 추가할 수 있고 다음에 작업이 실행될 때 자동으로 제거되기 때문입니다.
그러나 이는 제거하는 부작용이 있습니다.모두빈 디렉토리. 애플리케이션이 잘못 작성되어 데이터를 쓰기 전에 디렉터리가 존재하는지 확인하지 않으면 문제가 발생할 수 있다는 걱정이 듭니다.
소스 측에서 실제로 비어 있는 디렉토리가 아닌 제외로 인해 비어 있는 디렉토리만 "가지치기"하는 방법이 있습니까? (관련된 디렉터리 수로 인해 디렉터리 이름을 명시적으로 지정하는 대신 간단한 규칙을 사용하여 이 작업을 수행하고 싶습니다.)
즉시 떠오르는 유일한 해결책은 다음과 같습니다.
- 단종된 디렉토리
--prune-empty-dirs
와 추가 디렉토리가 허용됩니다. --delete-excluded
야간 작업에서 사용을 중지 하고 필터 파일을 변경할 때마다 수동으로--delete-excluded
(사용하지 않고 ) 실행하십시오. 그러면 새 제외 항목이 제거되고 "실제" 빈 디렉터리가 다시 생성됩니다.--prune
둘 다 이상적이지 않습니다.
답변1
제외 필터에 대한 제외로 인해 대상 측에서 비어 있는 디렉터리를 추가할 수 있습니다. 전체 디렉터리를 제외할 수 있으면 필터링 규칙이 더 간단해지고 --prune-empty-dirs
필요하지 않을 수도 있습니다. 또는 원본 측에서 실제로 비어 있는 디렉터리에 대한 필터 목록에 보호 규칙을 추가할 수 있습니다. rsync 매뉴얼 페이지에서:
전역 "보호" 필터를 사용하면 특정 빈 디렉터리가 파일 목록에서 제거되는 것을 방지할 수 있습니다. 예를 들어, 이 옵션은 "emptydir" 디렉터리가 파일 목록에 남아 있는지 확인합니다.
--filter '빈 디렉토리 보호/'
Protect의 약식은 대문자로 표시되므로 P
규칙은 다음과 같습니다.
P .stfolder
동기화가 .stfolder
정리되지 않도록 보호합니다.
제외하거나 보호하려는 폴더를 특정 패턴을 사용하여 식별할 수 있는 경우가 아니면 규칙을 상당히 명시적으로 지정해야 하지만 이 두 가지 방법을 조합하면 원하는 결과를 얻을 수 있습니다. 내 경험에 따르면 rsync 규칙은 완전히 완전하지는 않지만 수년에 걸쳐 점차 개선됩니다.