如何使用 plink 传输 tar 存档?

如何使用 plink 传输 tar 存档?

我想使用 PowerShell 将 .tar 存档从 Windows 计算机传输到 Linux 计算机并从流中提取存档。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 -"

我想我会上传文件并单独提取它们。

相关内容