linux - 二进制差异是否有流行的 Linux/Unix 格式?

标签 linux gzip diff binaryfiles delta

我将生成数 GB 文件的二进制增量。

天真地,我打算使用以下格式:

struct chunk {
    uint64_t offset;
    uint64_t length;
    uint8_t data[];
};

struct delta {
    uint8_t file_a_checksum[32]; // These are calculated while the
    uint8_t file_b_checksum[32]; // gzipped chunks are being written
    uint8_t chunks_checksum[32]; // at the 96 octet offset.
    uint8_t gzipped_chunks[];
};

我只需要将这些增量应用于用于生成增量的原始 file_a

这里有什么我遗漏的吗?

是否有一种现有的二进制增量格式具有我正在寻找的功能,但不是太复杂?

最佳答案

对于任意二进制文件,使用通用工具当然是有意义的:

  • 增量
  • bspatch
  • rdiff 备份 (rsync)
  • 比较差异

(是的,git diff 适用于不受版本控制的文件。git diff --binary --no-index dir1/file.bin dir2/file.bin )

在编写您自己的工具之前,我通常会推荐一个通用工具,即使有一点开销。虽然上面列表中的任何工具都无法以与“统一差异”格式一样普遍的格式生成二进制差异,但它们都是“接近于”标准工具。

还有一种可能与您相关的相当标准化的格式:简陋的 hexdump。 xxd 工具默认将二进制文件转储为相当标准的文本格式:

0000050: 2020 2020 5858 4428 3129 0a0a 0a0a 4e08      XXD(1)....N.

即偏移量后跟一系列字节值。确切的格式是灵活的,并且可以使用命令行开关进行配置。

但是,xxd 也可以在反向模式下使用以写入那些字节而不是转储它们。

因此,如果您有一个名为 patch.hexdump 的文件:

00000aa: bbccdd

然后运行 ​​xxd -r patch.hexdump my.binary 将修改文件 my.binary 以修改偏移量 0xaa 处的三个字节。

最后,我还应该提到 dd 可以搜索二进制文件并读/写给定数量的字节,所以我猜你可以使用“shell script with dd commands”作为你的补丁格式。

关于linux - 二进制差异是否有流行的 Linux/Unix 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40068620/

相关文章:

linux - OpenOCD 无法连接到 cortex 处理器

linux - shellscript 中行之间的空格被视为命令

linux - 比较前 x 个字符的文件

macos - 在 Mac 的源代码树中应用 .diff

c++ - 在 Linux 和 Windows 上计算相同 --> 不同的结果

linux - bash/sh -c 不适用于多个管道

mysql - 使用 Windows 提取/加载 Unix .nightly 文件

java - Matlab 中的 GZIP 用于大文件

python - mmap 和 gzip 可以协作吗?

diff - MIDI差异文件