특정 이름으로 심볼릭 링크된 디렉터리만 동기화하는 방법

특정 이름으로 심볼릭 링크된 디렉터리만 동기화하는 방법

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에 명령줄 인수를 사용하는 것을 고려했습니다.

관련 정보