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

Bash 如何仅获取二进制文件的前十个字节,bash,binary,Bash,Binary,我正在编写一个bash脚本,它需要获取文件的头(前10个字节),然后在另一节中获取除前10个字节之外的所有内容。这些是二进制文件,在前10个字节中可能包含\0和\n。似乎大多数实用程序都使用ASCII文件。实现此任务的好方法是什么?head-C10在这里做得很好。您可以使用该命令从二进制文件复制任意数量的字节 dd if=infile of=outfile1 bs=10 count=1 dd if=infile of=outfile2 bs=10 skip=1 如前所述,要获取前10个字节,请

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

head-C10在这里做得很好。

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

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

如前所述,要获取前10个字节,请执行以下操作:

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


这是可行的,但速度很慢。bs of 10正在销毁这些巨大的文件。有没有更快的方法跳过前十个字节?这似乎很简单。
dd
不可靠。由于许多不同的原因,它读取的字节数可能比请求的要少。@ceving您能至少提到其中一个原因吗?我不确定我是否相信你。以下示例打印的是1而不是2:
{printf a;sleep 1;printf b;}| dd bs=2 count=12>/dev/null | wc-c
解释是的,是的。我喜欢
dd
的想法,但是这个选项不需要改变缓冲区大小,所以它可以很好地处理大型文件。谢谢。有趣的是,这个答案是第一个答案,它是正确的,但其他答案的投票数要多得多。@robert这可能是因为这只是一个部分答案。任何需要十六进制输出的人都可以看到这个答案
tail -c+11