다음과 같이 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
에 나와 있습니다 .