Как транслировать архив tar с помощью plink?

Как транслировать архив tar с помощью plink?

Я хотел бы передать архив .tar с машины Windows с помощью PowerShell на машину 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 -"

Думаю, я загружу файлы и извлеку их по отдельности.

Связанный контент