N 个字节后切断管道

N 个字节后切断管道

我使用管道将信息传输到文件myTool > file.txt 2>&1,但该工具可能会生成千兆字节的数据 - 我需要在前 N 个字节之后切断,比如说 2MB。似乎pv无法做到这一点,遗憾的是它不是按行进行的选项(head)。

没有基本的工具可以做到这一点吗?

理想情况下,它会像这样工作myTool | limiter --amount 2M > file.txt 2>&1

答案1

有几个实现head支持-c此选项。 GNU 实现还接受M兆字节后缀,最新版本还支持MB兆字节 (1,000,000) 和MiB兆字节 (1,048,576)。

head -c 2097152
head -c 2M
head -c 2MiB
head -c 2000000
head -c 2MB

使用pv,您可以使用 指定大小,-s并使用 告诉它在达到大小后立即停止读取-S。同样,支持后缀,但这是 1024 的幂,而不是 1000。

pv -Ss 2M
pv -Ss 2097152
pv -Ss 2000000

-q如果不需要进度信息,请添加)

使用 GNU dd,您可以执行以下操作:

dd iflag=fullblock,count_bytes bs=64k count=2097152 status=none
dd iflag=fullblock,count_bytes bs=64k count=2MiB status=none
dd iflag=fullblock,count_bytes bs=64k count=2M status=none
dd iflag=fullblock,count_bytes bs=64k count=2000000 status=none
dd iflag=fullblock,count_bytes bs=64k count=2MB status=none

相关内容