아래의 어색한 rsync 표현식을 단순화하는 방법에 대한 아이디어가 있습니까?

아래의 어색한 rsync 표현식을 단순화하는 방법에 대한 아이디어가 있습니까?

이것은 표현입니다:

rsync -avz --progress -e "ssh -i /where/is/my/id_dsa" [email protected]:`ssh -i /where/is/my/id_dsa  [email protected] "find /remote/source/dir -type f -name '*.sql' | sort -nr | head -1"` .

원격 호스트에서 새 SQL 파일을 찾습니다. 주인존재하다/원격/소스/디렉토리사용자와비벡 localhost의 현재 디렉터리에 복사되면 /where/is/my/id_dsasshrsync인증을 사용합니다.

그래서 이 백틱은 ssh -i ...나를 두렵게 합니다. 하지만 필요한 파일을 찾는 다른 방법은 없습니다. 어떻게 단순화할 수 있나요?

답변1

.ssh/config에 다음 구성을 추가하면 명령을 단순화할 수 있습니다.

    .host를 호스팅하세요.
        신원 파일/위치/is/my/id_dsa
        사용자 Vivek

이제 명령은 간단합니다

rsync -avz --progress -e "ssh some.host:`ssh some.host "find /remote/source/dir -type f -name '*.sql' | sort -nr | head -1"` .

일반적으로 나는 "P" 옵션이 더 짧은 --progress 대신 --partial --progress를 선호하므로 명령은 다음과 같습니다.

rsync -avzPe "ssh some.host:`ssh some.host "find /remote/source/dir -type f -name '*.sql' | sort -nr | head -1"` .

이전에 전송한 모든 SQL 파일을 현재 디렉터리에 보관하는 경우 rsync가 비교 작업을 수행하고 기존 파일을 재전송하지 않으므로 전송할 파일을 선택할 필요가 없습니다. 따라서 명령을 다음과 같이 더욱 단순화할 수 있습니다.

rsync -avzPe "ssh some.host:`ssh some.host "find /remote/source/dir -type f -name '*.sql'"` .

마지막으로 명령에서 rsync의 필터링 규칙을 사용할 수 있습니다.

rsync -avzP some.host:/remote/source/dir/**/*.sql .

하위 디렉터리 구조가 제거되므로 위 명령을 사용할 때 주의하시기 바랍니다. 먼저 --dry-run을 사용하여 실행해 보세요. 또한 단일 ":"이 rsync에 대신 ssh를 사용하도록 자동으로 지시하므로 -e ssh blah가 필요하지 않습니다. 이것이 귀하의 요구 사항을 충족하지 못하는 경우 알려주시기 바랍니다.

건배!

답변2

첫째, 별칭을 추가하여 SSH 명령을 단순화할 수 있습니다.~/.ssh/config문서.

Host somehost
HostName some.host
User vivek
IdentityFile /where/is/my/id_dsa

요점을 말하자면 두 단계를 수행해야 합니다. 먼저 복사할 파일을 결정한 다음(원격 측에서 수행해야 함) 해당 파일을 복사하거나 업데이트해야 합니다. 어떤 파일이 원격 파일이고 어떤 파일이 로컬 파일인지 걱정할 필요가 없다면 더 쉽습니다. 따라서 원격 파일 시스템을 마운트하십시오.sshfs.

mkdir somehost
sshfs somehost:/ somehost

이제 로컬 파일을 완벽하게 작업할 수 있습니다. 그렇지 않으면 로컬 파일 시스템이 빠르다고 가정하고 증분 델타 알고리즘을 적용하는 대신 항상 전체 파일을 복사하기 때문에 --no-whole-file해당 옵션을 에 전달 해야 합니다 .rsync

rsync -avz --progress --no-whole-file $(find somehost/remote/source/dir -type f -name '*.sql' | sort -nr | head -1) .

이제 call을 사용하는 대신 findzsh를 쉘로 사용하십시오. 대부분의 find휴대폰과 마찬가지로 여러 휴대폰으로 교체할 수 있습니다.글로벌 예선: .for -type f, On숫자를 정렬하고 [1]첫 번째 일치 항목만 유지합니다.

rsync -avz --progress --no-whole-file somehost/remote/source/dir/**/*.sql(.on[1]) .

관련 정보