ddを使用してファイルの正確な部分を抽出しますか?

ddを使用してファイルの正確な部分を抽出しますか?

588Koファイルがあり、0x7E8D6から0x8AD5Dまでバイトを抽出したいと思います。私は試した:
dd if=file of=result bs=50311 count=1 skip=518358

  • 50311は0x8AD5D - 0x7E8D6を示します。
  • 518358は0x7E8D6を表します(切り取りたい場所から)

dd は指定されたオフセットに移動できないことを通知します。どうですか?これを行うことができる他のユーティリティはありますか?

答え1

ddを使用してファイルの正確な部分を抽出しますか?

構文を少し調整してみましょう。

bs=1

個々のブロックまたはバイトで計算またはスキップしたいので、ブロックサイズを1に設定します。

skip=518358

ストリームの先頭からこれだけのブロックまたはバイトをスキップします。

count=50311

ストリームから多すぎるブロックまたはバイトをコピーします。

dd if=/path/file of=/path/result bs=1 count=50311 skip=518358

答え2

skipそしてcountブロックで表現されます。 518358×50311バイトをスキップするように要求しました。

ddエラーが検出されるのを防ぎます。だから、とにかく避けるのが最善です。

headほとんどのUnixバリアント(BusyBoxは含まれていますがOpenSBDは除く)の場合と複数のバイトを渡すことができますtailtail1から世紀を始めることを忘れないでください。

<file tail -c "$((0x7E8D6 + 1))" | head -c "$((0x8AD5D - 0x7E8D6))" >result

関連情報