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