So erhalten Sie nur die ersten zehn Bytes einer Binärdatei

80

Ich schreibe ein Bash-Skript, das den Header (die ersten 10 Bytes) einer Datei abrufen und dann in einem anderen Abschnitt alles außer den ersten 10 Bytes abrufen muss. Dies sind Binärdateien, die wahrscheinlich in den ersten 10 Bytes \0'und \n' enthalten. Es scheint, dass die meisten Dienstprogramme mit ASCII-Dateien arbeiten. Was ist ein guter Weg, um diese Aufgabe zu erreichen?

Benutzer1
quelle
1
Für alle, die die Hex-Ausgabe benötigen, siehe diese Antwort unix.stackexchange.com/a/10882/103618
Alwin Kesler

Antworten:

144

So erhalten Sie die ersten 10 Bytes, wie bereits erwähnt:

head -c 10

So erhalten Sie alle bis auf die ersten 10 Bytes (zumindest mit GNU tail):

tail -c+11
psmears
quelle
3
Ja. Die ddIdee hat mir gefallen , aber diese Option erfordert keine Änderung der Puffergröße, sodass sie gut mit großen Dateien funktioniert. Vielen Dank.
User1
41

head -c 10 macht hier das Richtige.

Mondschatten
quelle
9
Es ist interessant, dass diese Antwort die erste war, es ist richtig, aber die anderen haben viel mehr positive Stimmen.
Robert
34

Mit dem ddBefehl können Sie eine beliebige Anzahl von Bytes aus einer Binärdatei kopieren.

dd if=infile of=outfile1 bs=10 count=1
dd if=infile of=outfile2 bs=10 skip=1
Mark Ransom
quelle
1
Das funktioniert, ist aber ziemlich langsam. Das bs von 10 tötet diese riesigen Dateien. Gibt es eine schnellere Möglichkeit, die ersten zehn Bytes zu überspringen? Es scheint so einfach.
User1
dd ist nicht zuverlässig. Es kann aus vielen verschiedenen Gründen weniger Bytes lesen als angefordert.
22.
@ceving könntest du mindestens einen dieser Gründe nennen? Ich bin mir nicht sicher, ob ich dir glaube.
Mark Ransom
Im folgenden Beispiel wird 1 statt 2 { printf a; sleep 1; printf b; } | dd bs=2 count=1 2>/dev/null | wc -c
gedruckt
Die Erklärung ist hier und hier
am