替换大文件中的二进制块

替换大文件中的二进制块

我有一个分区映像,其中包含一个填充有随机数据的 1MB 文件,我想用另一个填充有不同随机数据的 1MB 文件替换该文件的内容。

我之前做过类似的事情,通过创建一个具有已知唯一字符串的文件并使用 sed 来替换它,例如sed -i 's/foobar_corruptiontest/barfoo_corruptiontest/' partition.img

对于解决方案,我想象了以下内容:

head -c 1M </dev/urandom >fileA
head -c 1M </dev/urandom >fileB
binary_sed -i 's/<fileA/<fileB/' partition.img

我找到了一个工具贝贝它声称是一个类似于 sed 的二进制文件编辑器,但除非我错误地阅读了手册页,否则它似乎不支持文件输入?

旁注:如果您非常困惑为什么有人想要这样做,上下文是我正在测试真实性通过以可预测的方式损坏文件,但它应该与问题无关。事实上,请不要在答案中考虑它。

答案1

我找到了一个不错的解决方案,但不幸的是它需要一个非标准工具来搜索文件偏移量。我希望有人能够提出一个仅使用标准工具的更好答案。

安装工具搜索箱

head -c 1M </dev/urandom >fileA
head -c 1M </dev/urandom >fileB
OFFSET=$(searchbin -f fileA -m 1 partition.img | head -1 | awk '{print $4}')
dd if=fileB of=paritition.img bs=1 seek=${OFFSET} conv=notrunc

相关内容