如何仅获取二进制文件的前十个字节


80

我正在编写一个bash脚本,该脚本需要获取文件的头(前10个字节),然后在另一部分中获取除前10个字节以外的所有内容。这些是二进制文件,在前10个字节中可能会有\0\n。似乎大多数实用程序都可使用ASCII文件。什么是完成此任务的好方法?


1
对于需要十六进制输出的任何人,请参见以下答案:unix.stackexchange.com/a/10882/103618
Alwin Kesler,

Answers:


144

如前所述,要获取前10个字节:

head -c 10

要获取除前10个字节以外的所有字节(至少使用GNU tail):

tail -c+11

3
是。我喜欢这个dd主意,但是此选项不需要更改缓冲区大小,因此可以很好地处理大型文件。谢谢。
User1 2010年

41

head -c 10 在这里做正确的事。


9
有趣的是,这个答案是第一个,是正确的,但是其他答案更多。
罗伯特

34

您可以使用该dd命令从二进制文件复制任意数量的字节。

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

1
这可行,但是速度很慢。10的bs会杀死这些巨大的文件。有没有一种更快的方法来跳过前十个字节?似乎很简单。
User1 2010年

dd 不可靠。由于许多不同的原因,它读取的字节可能少于请求的字节。
ceving

@ceving您能否提及其中至少一个原因?我不确定我是否相信你。
Mark Ransom

下面的示例打印1而不是2:{ printf a; sleep 1; printf b; } | dd bs=2 count=1 2>/dev/null | wc -c

解释在这里这里
ceving
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.