(请注意,这不是创建包含校验和的 tar 文件)
我熟悉使用 tar + gzip 创建压缩的 tar 文件 ( tar cf - files | gzip > something.tar.gz
),并且 gzip 确实添加了主校验和,因此如果文件损坏,就会很明显。这几乎是我想要的行为。
但是,我的电脑处理器(真的很慢)但网卡很快。我发现,如果我使用 tar 加 gzip 加 socat,我的网络传输速度是 1/10(100Mbps),而不是不使用 gzip 命令(950Mbps)。
一些存档实用程序(如 7Zip 和 Zip)支持零压缩选项。我没有看到 gzip 或 bzip2 有这样的选项。但是 Zip 和 7Zip 不像 gzip 和 bzip2 那样支持正确的流式传输(我知道 7z 可以从 stdio 读取/写入纯文本,但它不会将压缩文件写入 stdout)。我必须有一个正确的流式传输“压缩”程序,因为我将使用 socat 将存档发送到远程主机。
所以问题是,有没有办法创建一个 tar 存档,同时将输出包装成类似存档的格式,而不使用 gzip 或 bzip2?或者有没有办法让 gzip 或 bzip2 使用“不压缩”?或者有没有一种非常简单的超快流式压缩实用程序,可能只使用 RLE 编码?
注意事项 - 它需要完全流式传输,以便我可以使用 socat;解决方案必须是 CPU 轻量级的;解决方案必须使用 cygwin 和 debian 存储库中可用的部件
答案1
您可以将lz4
其用作 gzip 的替代品。压缩率没有那么好,但与 gzip 相比,它通常速度极快。
对于您要做的事情来说,它可能仍然太慢,但可能值得一看。
您还可以tee
将 的输出tar
分成两个不同的流并将其中一个推入md5sum
,sha1sum
或者sha256sum
通过调用
tar cf - files | tee >(md5sum) | whatever-command
。