Как передать tar-архив с помощью plink?

Я хочу передать архив.tar с компьютера Windows с помощью PowerShell на компьютер Linux и извлечь архив из потока. PowerShell отправляет содержимое архива на стандартный вывод, а содержимое потока plink.exe — на стандартный ввод командной строки.

Я придумал следующую команду.

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

0
задан 16 September 2021 в 10:51
1 ответ

Судя по всему, это проблема с кодировкой. По умолчанию Get-Content возвращает содержимое файла в виде закодированной строки, но tar ожидает двоичный поток. Решением будет кодирование двоичных данных в текстовый формат, такой как Base64, и их декодирование. Я подхожу к следующей строчке из-за ее ужасной медленности.

[System.Convert]::ToBase64String((Get-Content -AsByteStream file.tar)) | plink.exe -C -agent "remote_host" "base64 -di | tar xvf -"

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

0
ответ дан 17 September 2021 в 04:57

Теги

Похожие вопросы