Я хотел бы передать архив .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 -"
Думаю, я загружу файлы и извлеку их по отдельности.