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 -"
파일을 업로드하고 별도로 추출할 것 같아요.