2010-12-10 15 views
52

Ich schreibe ein Bash-Skript, das den Header (erste 10 Bytes) einer Datei bekommen muss und dann in einem anderen Abschnitt alles außer den ersten 10 Bytes. Dies sind Binärdateien und werden wahrscheinlich \0 's und \n' s in den ersten 10 Bytes haben. Es scheint, als ob die meisten Dienstprogramme mit ASCII-Dateien arbeiten. Was ist ein guter Weg, um diese Aufgabe zu erfüllen?Wie bekomme ich nur die ersten zehn Bytes einer Binärdatei?

Antwort

84

Um die ersten 10 Bytes zu erhalten, wie bereits erwähnt:

head -c 10 

Um alle bis auf die ersten 10 Bytes (zumindest mit GNU tail) zu erhalten:

tail -c+11 
+2

Ja. Ich mochte die Idee "dd", aber diese Option erfordert keine Änderung der Puffergröße, so dass es gut mit großen Dateien funktioniert. Vielen Dank. – User1

26

head -c 10 macht das Richtige hier.

+3

Es ist interessant, dass diese Antwort die erste war, ist richtig, aber die anderen haben viel mehr Upvotes. – robert

28

Sie können den Befehl dd verwenden, um eine beliebige Anzahl von Bytes aus einer Binärdatei zu kopieren.

dd if=infile of=outfile1 bs=10 count=1 
dd if=infile of=outfile2 bs=10 skip=1 
+1

Das funktioniert, aber es ist ziemlich langsam. Die BS von 10 tötet diese riesigen Dateien. Gibt es eine schnellere Möglichkeit, die ersten zehn Bytes zu überspringen? Es scheint so einfach zu sein. – User1

Verwandte Themen