SSH 文件传输后 Zip 文件损坏

SSH 文件传输后 Zip 文件损坏

我正在尝试在 Windows 笔记本电脑上压缩一些文件,然后将它们传输到我的 Ubuntu 服务器并在那里解压,但是在解压档案时我总是收到错误,告诉我档案已损坏。

我做了一些检查,虽然 zip 文件具有相同的文件大小,但传输文件后 SHA256 校验和是不同的。

我使用了以下命令(在我的 Windows 笔记本电脑上使用 PowerShell):

cat .\archive.zip | ssh user@address "cat > ~/archive.zip"

我猜这与操作系统的差异有关,也许是行尾不同。有人知道如何正确传输档案吗?

答案1

这个问题下的其中一条评论:

这可能是因为序列中的cat个别出现被改变,因为它是用于文本的。LFCRCRLF

真正的猫太懒了,不会做这种恶作剧。在 PowerShell 中cat是 的别名Get-Content。您需要几个参数才能使其表现得像一个漂亮的cat

示例 6:获取原始内容

此示例中的命令将文件内容作为一个字符串而不是字符串数组获取。默认情况下,如果没有Raw动态参数,则内容将作为换行符分隔的字符串数组返回。[…]

$raw = Get-Content -Path .\LineNumbers.txt -Raw

我猜想,在你的情况下,这个“以换行符分隔的字符串数组”被连接起来,并且出现了一些行尾的混乱。但即使这样,Raw你仍然会得到一个字符串。你不想要一个字符串。

示例 8:以字节数组形式获取文件内容

此示例演示如何将文件的内容作为[byte[]]单个对象获取。

$byteArray = Get-Content -Path C:\temp\test.txt -AsByteStream -Raw

[…]

第一个命令使用AsByteStream参数从文件中获取字节流。该Raw参数确保将字节作为 返回[System.Byte[]]。如果Raw参数不存在,则返回值是字节流,PowerShell 会将其解释为[System.Object[]]

来源

我根本不了解 PowerShell。我不知道您是否应该想要[System.Byte[]][System.Object[]],或者这对您来说是否重要。我发现这个说法

-Raw-AsByteStream/结合-Encoding Byte实际上是将文件内容作为原始字节数组([byte[]])获取,作为单个对象输出(而不是在没有的情况下逐个流式传输字节-Raw)的最简单方法。

猜测也许你应该使用Raw。我确信你应该使用AsByteStream

答案2

我找到了如何使用 SFTP,而且确实可以正确传输文件。不过,我仍然想知道为什么 cat 通过 ssh 不起作用,以及在没有 SFTP 的情况下是否可以做到这一点。

相关内容