一旦输出达到一定大小就停止终端命令?

一旦输出达到一定大小就停止终端命令?

如果我想运行somecommand > somefile但在somefile达到一定大小后停止它,我该怎么做?

答案1

somecommand | dd bs=1K count=2 iflag=fullblock > somefile

这将向文件写入恰好 2 KiB(如果somecommand先终止则更少)。POSIXiflag=fullblock不要求这样做,您的命令dd可能不支持它,包含的命令iflag=fullblock不可移植。比较这种情形看看它为何重要。

处理正确数量的块(count=2在上面的例子中)dd终止后,这将中断管道。这取决于somecommand它对破裂的管道的反应。参见:什么原因导致 Unix 进程因管道损坏而死亡?

如果您要保留的字节数迫使您使用一些不方便的bs和/或count,请考虑以下事项:

somecommand | { dd bs=1M count=1024 iflag=fullblock; dd bs=10 count=1 iflag=fullblock; } > somefile

该命令将写入 1 GiB(=1024 MiB)加上 10 个字节。

的一些实现head允许您使用-c选项获取任意数量的字节。这也是不可移植的,POSIX 不要求该选项。

根据这个答案 dd输入块大小为 1 ( ibs=1) 是读取精确字节数的唯一 POSIX 方法。

如果somecommand生成文本输出并且您想要限制文件中的行数,head那么这是正确的工具。这将仅保存前 5 行(同样,less ifsomecommand首先终止):

somecommand | head -n 5 > somefile

POSIX 要求使用-n选项。head

相关内容