如何检查一个大的二进制文件是否包含另一个文件的内容?

Gre*_*ake 2 binary files

我有一个大的二进制文件,例如一个 WAV 文件,我怀疑它可能包含一个较小的 WAV 文件的整个字节序列。

我如何检查是否有效?如果是的话,我如何找到起始位置?

就像是:

$ findguts big.wav small.wav
1234 # the contents of small.wav are found inside big.wav starting at byte #1234
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

perl

perl -l -0777 -ne '
  print "found at offset $o" if ($o = index($_, <STDIN>)) >= 0
  ' big.wav < small.wav
Run Code Online (Sandbox Code Playgroud)

(请注意,这两个文件都加载到内存中,因此它不会扩展到非常大的文件)。

  • 也许,我们应该考虑此类文件的标头,例如 [WAV](https://docs.fileformat.com/audio/wav/) 我看到前 44 个字节是标头,它取决于文件(例如最后一部分是文件大小),因此在搜索之前用尾部或其他东西排除它似乎是有意义的。(对wav格式一无所知) (2认同)