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?


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

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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.