ファイルの先頭と末尾からバイトを削除する方法は?

ファイルの先頭と末尾からバイトを削除する方法は?

ファイルの先頭と末尾にゴミ(バイナリヘッダーとフッター)があるファイルがあります。このバイトを攻撃する方法を知りたいです。たとえば、最初から25バイトがあるとしましょう。そして最後から2バイトです。

truncateとddが利用可能であることを知っていますが、truncateはストリームで機能しないため、ハードファイルから2つのコマンドを実行するのは少し扱いに​​くいようです。truncateファイルのサイズを知りながらファイルを別のファイルに転送できる場合はどうなりますかdd?それとももっと良い方法がありますか?

答え1

GNUと組み合わせることができます。tailそしてhead:

tail -c +26 file | head -c -2

file出力はバイト26で始まり、-2終了(マイナス2)の前の2バイトで停止します。 (-c操作は文字ではなくバイトで機能します。)

答え2

DDこれら2つの操作は単一のコマンドで実行されます。ブロックサイズを1バイトに設定し、最初の25バイトをスキップし、スキップと終了バイトを引いたファイルサイズを計算します。

100 byte file
file.img

dd if=./file.img of=./trimed_file.img bs=1 skip=25 count=73

数字は0から数え始めますので、注意深く確認してください。

答え3

ksh93の使用:

{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25))

それともその場でやってください:

{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25)) 1<>; file

あなた/opt/ast/binがあなたよりも先にいるなら、組み込みの機能を$PATH得るでしょう。head

  • <#((...))オペレーターですlseek()。はファイルの長さである...算術式として解釈されます。したがって、上記では、ファイルでEOF表示する部分の長さを25バイトで指定しました。$n
  • <>;読み取り+書き込みモードで開き、コマンドが成功したときに切り捨てられるリダイレクト演算子です。

関連情報