Me gustaría transmitir un archivo .tar desde una máquina con Windows usando PowerShell a una máquina con Linux y extraer el archivo de la transmisión. PowerShell envía el contenido del archivo a la salida estándar y plink.exe transmite el contenido a la entrada estándar de la línea de comandos.
Se me ocurrió el siguiente comando.
Get-Content file.tar | & plink.exe -C -agent "remote_host" "tar xf -"
Sin embargo, el comando tar reconoce el contenido del archivo sólo parcialmente. ¿Qué me falta o hay una mejor solución para el problema?
Mensaje de error:
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
Respuesta1
Aparentemente, se trata de un problema de codificación. De forma predeterminada, Get-Content devuelve el contenido del archivo como una cadena codificada, pero tar espera una secuencia binaria. La solución sería codificar los datos binarios en un formato de texto como Base64 y decodificarlos. Llego al siguiente chisme por su terrible lentitud.
[System.Convert]::ToBase64String((Get-Content -AsByteStream file.tar)) | plink.exe -C -agent "remote_host" "base64 -di | tar xvf -"
Creo que subiré archivos y los extraeré por separado.