如何找到二进制文件中的最后一个非零字节?

如何找到二进制文件中的最后一个非零字节?

我有一个巨大的二进制文件,末尾填充了空值,我想找到最后一个非零/空字节,特别是它相对于文件开头的偏移量。

寻找一些命令行解决方案。

答案1

您没有说您手头有哪些工具或者您拥有哪种操作系统,但假设您可以使用标准 unix 工具(如 xxd 和 grep),您可以执行以下操作:

xxd my_binary_file | grep -E ": [0-9,a-f, ]*[1-9,a-f]+"

上述命令将过滤掉文件中仅以0000显示的部分。

答案2

对于较小的文件:

hexdump -C file | tail

hexdump实用程序会压缩内容相同的连续行,因此除了最后十行输出之外,其余行都会被丢弃,从而显示输出重复的最后位置。

对于较大的文件,使用

dd if=file bs=1M skip=$n count=1 | hexdump -C | tail

对于不同的 值$n,进行二分搜索。例如,对于一个 700 GB 的文件,您从 开始skip=350000,如果输出返回全零,则向下减半到skip=175000,如果它显示非零字节,则向上减半到skip=525000,每次迭代将步长减半。这假设文件内没有大块的零,但对于大文件来说速度要快得多。

相关内容