ファイルの先頭と末尾にゴミ(バイナリヘッダーとフッター)があるファイルがあります。このバイトを攻撃する方法を知りたいです。たとえば、最初から25バイトがあるとしましょう。そして最後から2バイトです。
truncateとddが利用可能であることを知っていますが、truncateはストリームで機能しないため、ハードファイルから2つのコマンドを実行するのは少し扱いにくいようです。truncate
ファイルのサイズを知りながらファイルを別のファイルに転送できる場合はどうなりますかdd
?それとももっと良い方法がありますか?
答え1
答え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
<>;
読み取り+書き込みモードで開き、コマンドが成功したときに切り捨てられるリダイレクト演算子です。