我有一个巨大的二进制文件,末尾填充了空值,我想找到最后一个非零/空字节,特别是它相对于文件开头的偏移量。
寻找一些命令行解决方案。
答案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
,每次迭代将步长减半。这假设文件内没有大块的零,但对于大文件来说速度要快得多。