rsync를 사용하여 특정 심볼릭 링크만 복사하시겠습니까?

rsync를 사용하여 특정 심볼릭 링크만 복사하시겠습니까?

다음과 같이 rsync를 사용하여 복사하려는 폴더 구조가 있습니다. 여기서 구조는 일련의 백업이고 여기에서 최신 백업(심볼릭 링크를 사용하여 식별할 수 있음)만 복사하려고 합니다.

/backups
    /foo
        /2019-05-01
        /2019-06-01
        /latest -> 2019-06-01
    /bar
        /2019-05-20
        /2019-06-20
        /latest -> 2019-06-20

기타 내가 하고 싶은 것은 단일 rsync 명령을 사용하여 복사하는 것입니다.오직latest구조를 모방하면서 각 폴더를 백업합니다 . 이를 위해 다음 명령을 생각해 냈습니다.

rsync -rptgoDLm --include '*/' --include '/*/latest/**' --exclude '*' user@remote:/backups /some/local/path

--copy-links기본적으로 분기만 선택하기 위한 일부 포함/제외 트릭이 포함된 아카이브입니다 /*/*/latest(그리고 -m여러 개의 빈 디렉토리 구조를 피함). 이 모든 것은 한 가지 문제를 제외하고는 훌륭하게 작동합니다. 이러한 분기 중 하나에 심볼릭 링크가 포함되어 있으면 단순한 심볼릭 링크가 아닌 대상으로도 복사됩니다.

내가 정말로 해야 할 일은오직--copy-links발생하는 다른 동작에 대해서는 latest다른 동작(예: 동작)을 사용하는 동시에 심볼릭 링크와 함께 동작을 사용합니다 .--links

rsync 명령으로 이러한 기능을 구현할 수 있습니까? 내 목표는 직접적인 콘텐츠를 알지 않고도 실행할 수 있도록 하는 것입니다 /backups. 따라서 새 콘텐츠(예: /backups/baz)를 추가하면 자동으로 복사됩니다.

고쳐 쓰다: 명확히 하기 위해 대상에서 보고 싶은 결과 디렉토리 구조는 다음과 같습니다.

/backups
    /foo
        /latest
    /bar
        /latest

즉, 대상에 있는 각 백업의 최신 버전만 필요합니다. 대상 자체는 백업 기록을 다른 방식으로 처리합니다.

답변1

귀하의 요구 사항을 충족하는 것 같습니다

rsync -avR user@remote:'/backups/*/latest/' /some/local/path/

-R플래그는 전체 소스 경로를 대상으로 효과적으로 "복사"하며 결과 백업은 /some/local/path/backups/{whatever}/latest.

전체 소스 경로가 필요하지 않다고 판단되면 이를 포함하여 /./경로를 대상에 복사해야 하는 지점을 나타낼 수 있습니다. 예를 들어 /backups/./foo/latest/다음이 발생합니다 /some/local/path/foo/latest/(즉, /backups구성요소를 건너뛰었습니다). 자세한 내용은 설명서( ) man rsync에 나와 있습니다 .

관련 정보