plink를 사용하여 tar 아카이브를 스트리밍하는 방법은 무엇입니까?

plink를 사용하여 tar 아카이브를 스트리밍하는 방법은 무엇입니까?

PowerShell을 사용하여 Windows 시스템에서 Linux 시스템으로 .tar 아카이브를 스트리밍하고 스트림에서 아카이브를 추출하고 싶습니다. PowerShell은 아카이브 콘텐츠를 stdout으로 푸시하고 plink.exe 스트림 콘텐츠를 명령줄의 stdin으로 푸시합니다.

나는 다음 명령을 생각해 냈습니다.

Get-Content file.tar | & plink.exe -C -agent "remote_host" "tar xf -"

그러나 tar 명령은 파일 내용을 부분적으로만 인식합니다. 내가 놓치고 있는 것이 무엇입니까? 아니면 문제에 대한 더 나은 해결책이 있습니까?

에러 메시지:

tar: Skipping to next header
tar: Exiting with failure status due to previous errors

답변1

분명히 이것은 인코딩 문제입니다. 기본적으로 Get-Content는 파일 콘텐츠를 인코딩된 문자열로 반환하지만 tar에서는 바이너리 스트림을 기대합니다. 해결책은 바이너리 데이터를 Base64와 같은 텍스트 형식으로 인코딩하고 디코딩하는 것입니다. 나는 끔찍한 속도로 인해 다음과 같은 한 줄의 내용을 얻었습니다.

[System.Convert]::ToBase64String((Get-Content -AsByteStream file.tar)) | plink.exe -C -agent "remote_host" "base64 -di | tar xvf -"

파일을 업로드하고 별도로 추출할 것 같아요.

관련 정보