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)에 더 자세한 내용이 있습니다.

관련 정보