rsync 및 스키마를 다루는 여러 답변을 방문했지만 이 특정 문제에 대한 해결책을 찾을 수 없습니다. 원격 시스템에 아래와 같은 디렉터리 구조가 있고 이를 로컬 디렉터리로 재동기화하려고 한다고 가정합니다. 이는 원격 디렉터리의 "최신" 부분만 미러링하는 것과 같습니다.
root
|-dir_a
| |-LATEST -> version_3
| |-version_1
| |-version_2
| `-version_3
|-dir_b
| |-LATEST -> version_1
| `version_1
`dir_c
|-LATEST -> version_3
|-version_1
|-version_2
`-version_3
LATEST는 항상 최신 버전의 리모컨을 가리키는 심볼릭 링크입니다. 현재 rsync --list-only
쉘 스크립트를 사용하여 출력을 처리하고 최신 버전만 동기화하려고 합니다 . 조금 고통 스럽습니다. 이것은 어떤 --include
패턴을 사용하여 이를 수행할 수 있는 방법이 있다고 생각합니다 --exclude
. 이를 수행할 수 있는 패턴 세트를 작성하는 데 도움을 줄 수 있는 사람이 있습니까?
또한 더 이상 최신 버전이 아닌 이전 버전을 제거하는 방법을 찾고 싶습니다. 내 스크립트는 디렉터리를 탐색하고 최신 심볼릭 링크 외부의 디렉터리를 찾아 삭제합니다. rsync가 작동할 수 있나요?
답변1
나는 이 패턴 매칭이 간단하지 않다는 것을 배웠다. 루트 경로의 모든 디렉터리는 LATEST
포함 패턴에 포함되어야 합니다( --include=*/ --include=*/dir_1/
또는 사용 --filter='+ /' --filter='+ /dir_1/'
). 마찬가지로 다른 모든 항목은 --exclude=*
또는 )로 제외 되어야 합니다 --filter='- /unwanted_dir/*
.
내 스크립트는 여전히 출력을 구문 분석하여 심볼릭 링크가 어디로 가는지 --list-only
찾습니다 . LATEST
그 후에는 도달할 경로만 포함합니다 LATEST
.
나는 LATEST를 심볼릭 링크로 얻을 수 있고 그것이 가리키는 위치를 얻을 수 있도록 rsync에 명령줄 인수를 사용하는 것을 고려했습니다.