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 -"

ファイルをアップロードして別々に抽出しようと思います。

関連情報