이것은 표현입니다:
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_dsa
키 ssh
와 rsync
인증을 사용합니다.
그래서 이 백틱은 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을 사용하는 대신 find
zsh를 쉘로 사용하십시오. 대부분의 find
휴대폰과 마찬가지로 여러 휴대폰으로 교체할 수 있습니다.글로벌 예선: .
for -type f
, On
숫자를 정렬하고 [1]
첫 번째 일치 항목만 유지합니다.
rsync -avz --progress --no-whole-file somehost/remote/source/dir/**/*.sql(.on[1]) .