二进制差异是否有流行的 Linux/Unix 格式?
Is there a popular Linux/Unix format for binary diffs?
我将生成数 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
。
这里有什么我遗漏的吗?
是否有现有的二进制增量格式具有我正在寻找的功能,但不是太复杂?
对于任意二进制文件,使用通用工具当然是有意义的:
- xdelta
- bspatch
- rdiff-备份(rsync)
- git 差异
(是的,git diff
适用于不受版本控制的文件。git diff --binary --no-index dir1/file.bin dir2/file.bin
)
在编写您自己的工具之前,我通常会推荐一个通用工具,即使有一点开销。虽然上面列表中的 none 工具以与 "unified diff" 格式一样普遍存在的格式生成二进制差异,但它们都是 "close to" 标准工具。
还有一种可能与您相关的相当标准化的格式:简陋的 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
可以搜索二进制文件和 read/write 给定的字节数,所以我想你可以使用 "shell script with dd
commands" 作为你的补丁格式.
我将生成数 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
。
这里有什么我遗漏的吗?
是否有现有的二进制增量格式具有我正在寻找的功能,但不是太复杂?
对于任意二进制文件,使用通用工具当然是有意义的:
- xdelta
- bspatch
- rdiff-备份(rsync)
- git 差异
(是的,git diff
适用于不受版本控制的文件。git diff --binary --no-index dir1/file.bin dir2/file.bin
)
在编写您自己的工具之前,我通常会推荐一个通用工具,即使有一点开销。虽然上面列表中的 none 工具以与 "unified diff" 格式一样普遍存在的格式生成二进制差异,但它们都是 "close to" 标准工具。
还有一种可能与您相关的相当标准化的格式:简陋的 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
可以搜索二进制文件和 read/write 给定的字节数,所以我想你可以使用 "shell script with dd
commands" 作为你的补丁格式.