我想使用 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 -"
我想我会上传文件并单独提取它们。