Ich habe eine Datei mit Papierkorb (binäre Kopf- und Fußzeile) am Anfang und Ende der Datei. Ich würde gerne wissen, wie man diese Bytes nuklearisiert. Nehmen wir als Beispiel 25 Bytes von Anfang an an. Und 2 Bytes vom Ende.
Ich weiß, dass ich Truncate und DD verwenden kann, aber Truncate funktioniert nicht mit einem Stream und es scheint etwas umständlich, zwei Befehle für die Hard-Datei auszuführen. Es wäre schöner, wenn man truncate
, wenn man wüsste, wie groß die Datei ist, die Datei zuordnen könnte dd
. Oder ob es einen schöneren Weg gibt, dies zu tun?
tail -c +26
Standard ist (head -c -2
nicht).head -c -2
Befehls?dd erledigt beides für Sie in einem einzigen Befehl. Stellen Sie die Blockgröße auf 1 Byte ein, überspringen Sie die 25 ersten Bytes, zählen Sie bis zur Dateigröße abzüglich der Überspring- und Endbytes.
dd if=./file.img of=./trimed_file.img bs=1 skip=25 count=73
Überprüfen Sie die Zahlen, da sie möglicherweise von 0 zählen.
quelle
$((
stat -c% s Test verwenden` - 5)) `Ich denke.bs=1
dd macht zwei systemaufrufe für jedes byte, das ist schrecklich langsam. GNU dd hat dascount_bytes
undskip_bytes
das kann helfen, so etwas zu tundd bs=8192 iflag=count_bytes,skip_bytes skip=25 count=73 < infile > outfile
Mit ksh93:
Oder um es vor Ort zu tun:
Wenn Sie
/opt/ast/bin
vor Ihrem$PATH
, werden Sie die bekommenhead
builtin.<#((...))
ist einlseek()
Operator....
wird als arithmetischer Ausdruck interpretiert, wobeiEOF
die Länge der Datei ist. Daher weisen wir oben die Länge des anzuzeigenden Teils zu$n
und suchen nach 25 Bytes in der Datei.<>;
ist ein Open-In-Read + Write-Modus und das Abschneiden, wenn der Befehl erfolgreich umgeleitet wird.quelle