원격 '동적' 디렉터리에 대한 SSH 액세스

원격 '동적' 디렉터리에 대한 SSH 액세스

짧은 버전

이름이 변경된 원격 디렉터리를 동기화하고 싶습니다. (작동 안함!):

rsync -a '[email protected]:~/.zfs/snashots/$(ls -d Automatic-* | tail -1)/foo'  ~/foo

더 긴 버전/배경

인터넷에 접속할 수 있는 하드 드라이브가 있습니다(헤츠너 보관함), 정기적으로 ZFS 스냅샷을 생성합니다. 디렉터리 내의 스냅샷에 액세스할 수 있습니다 /.zfs/snapshots. 모든 스냅샷에는 다음과 같은 패턴의 이름을 딴 하위 디렉터리가 있습니다 Automatic-<timestamp>.

$ ls /.zfs/snapshots
Automatic-2021-10-01T00-25-22   Automatic-2021-12-01T00-23-14   Automatic-2022-02-01T00-21-38

이 각 폴더에는 스냅샷 생성 당시 내 파일의 고정 상태가 포함되어 있습니다. 나는 최신 폴더의 내용을 내 홈 서버에 정기적으로 미러링하고 싶습니다. 왜냐하면 이 폴더에는 내 파일의 최신 '동결' 상태가 포함되어 있기 때문입니다. 타임스탬프 패턴은 정렬 가능하므로 예를 들어 다음 명령을 사용하여 최신 폴더를 쿼리할 수 있습니다.

$ ls -d Automatic-* | tail -1
Automatic-2022-04-01T00-24-16

rsync에게 '최신' 원격 소스 디렉토리를 얻는 방법을 알려줄 가능성이 있습니까?

위의 예에서 명령 대체를 시도하지 않았지만 rsync에서는 작동하지 않을 것이라고 생각합니다. 그런데 심볼릭 링크( )를 만들어 보았습니다 ln -s '/path/to/$(ls -d Automatic-* | tail -1)/foo' /target. 그러나 이 ln명령은 액세스가 아닌 생성 시 경로를 확인합니다.

어떤 아이디어?

답변1

내 요구에 맞는 한 가지 가능한 솔루션을 찾았습니다. 동기화에 앞서 필요한 폴더를 쿼리하는 스크립트를 작성했습니다.

#!/bin/bash
LATEST_SNAPSHOT=$(ssh xxx.your-storagebox.de 'ls .zfs/snapshot/' | tail -1)
rsync -a "xxx.your-storagebox.de:.zfs/snapshot/${LATEST_SNAPSHOT}" /target

관련 정보