타르 파이프와 분할 파이프를 scp로 연결

타르 파이프와 분할 파이프를 scp로 연결

그래서 SCP를 통해 여러 파일을 전송해 보았습니다. 이러한 파일 중 일부는 너무 커서 수신자에게 저장할 수 없습니다(Android 휴대폰, 4GB 파일 크기 제한).

발신자 공간이 거의 없어서 로컬에서 중간 파일을 생성할 수 없습니다.

이 데이터를 패키징하고 분할을 통해 스트리밍하여 전화기가 수용할 수 있는 더 작은 조각(예: 기본 명령)을 얻고 싶습니다.

tar -cvf - ~/batch/ | split --bytes=1024m - batch.tar.seg

하지만 scp로 파이프하여 전화로 보내는 방법을 잘 모르겠습니다. 댓글에 따르면이 게시물, 가능하지만 첫째로 그가 말하는 내용을 잘 이해하지 못하고 둘째로 분할하면 여러 파일이 출력되므로 이것을 구현하는 방법을 잘 모르겠습니다.

어떤 아이디어가 있나요?

답변1

수신자에게 하나가 있는 경우 split다음을 수행할 수 있습니다.

tar -cvf - ~/batch/ | gzip |
  ssh recipient 'cd /destination &&
    split --bytes=1024m - batch.tar.gz.seg'

답변2

언급한 의견은 scp 및 ssh를 사용하여 STDIN에서 읽는 것을 언급하지만 전적으로 귀하의 경우는 아닙니다. 그 이유는 splitSTDOUT에 쓰지 않는다는 것입니다. 따라서 더 많은 파이프라인을 추가하더라도 거기에서 데이터를 얻을 수 없습니다. Stephane은 위 답변에서 올바른 조언을 했습니다. 여유 공간이 부족하기 때문에 소스에 아무것도 저장하지 말고 데이터를 압축하고 gzip으로 전송한 다음 청크 크기가 중요한 싱크에서 분할을 수행하세요.

답변3

인용한 게시물은 문제를 잘 설명합니다. 파이프를 사용할 때 파일을 복사하지 않고 표준 스트림을 리디렉션합니다. 이것은 scp올바른 도구(파일 복사용)는 아니지만 ssh올바른 프로그램입니다. 스트림을 ssh표준 입력으로 리디렉션하여 원격 호스트에 입력을 출력하고 지정된 명령의 표준 입력에 공급합니다.

local$ tar -cvzf - ~/batch/ | ssh target 'split --bytes=1024m - batch.tar.seg'

tar 옵션에 압축 플래그 "z"를 추가했는데 분할이 전혀 필요하지 않을 수도 있습니다.

관련 정보