bash: 在预定义位置拆分二进制文件
bash: Split binary file at predefined positions
我有二进制文件,其中包含 各种长度 的数据结构。我想将这些数据块保存到单独的文件中。每个块的大小是已知的。 split
命令可以很好地拆分文件,但它不会在第一个数据块之后停止。它将文件切成大小相等的片段。
因此,我目前的解决方案是将 split
和 cat
文件的其余部分重新组合在一起,遍历数据。这是非常笨拙的,在某些情况下甚至可能会失败。
在特定位置精确分割二进制文件的最佳方法是什么?
您可以使用两个独立的 dd
命令。一个是任意seek,一个是复制任意长度。
SEEK=501
BYTES=387
dd if=yourfile bs=$SEEK skip=1 | dd bs=$BYTES count=1 > lump.bin
注意:尽管与您实际尝试做的事情有悖常理,但为了获得最佳性能,请保持高块大小和低计数。我的意思是,如果你想要 8192 字节,请使用 bs=8192 count=1
而不是 bs=1 count=8192
。
我有二进制文件,其中包含 各种长度 的数据结构。我想将这些数据块保存到单独的文件中。每个块的大小是已知的。 split
命令可以很好地拆分文件,但它不会在第一个数据块之后停止。它将文件切成大小相等的片段。
因此,我目前的解决方案是将 split
和 cat
文件的其余部分重新组合在一起,遍历数据。这是非常笨拙的,在某些情况下甚至可能会失败。
在特定位置精确分割二进制文件的最佳方法是什么?
您可以使用两个独立的 dd
命令。一个是任意seek,一个是复制任意长度。
SEEK=501
BYTES=387
dd if=yourfile bs=$SEEK skip=1 | dd bs=$BYTES count=1 > lump.bin
注意:尽管与您实际尝试做的事情有悖常理,但为了获得最佳性能,请保持高块大小和低计数。我的意思是,如果你想要 8192 字节,请使用 bs=8192 count=1
而不是 bs=1 count=8192
。