Head 在打印前等待标准输入已满

Head 在打印前等待标准输入已满

当一个人跑步时

ls | head

head 似乎要等待管道命令的完整输出后才打印到屏幕上。当命令需要很长时间才能运行时,例如在包含数百万个文件的目录上运行 ls 时,这种情况是不可取的。

然而,当一个人跑的时候

find | head

head 并不会等待完整的输出之后才开始打印到屏幕上 - 它似乎是实时地完成的。

我的问题是: find 和 ls 之间的区别是什么,导致了这种行为上的差异?其次,是否有一个替换命令(用于 ls 或 head)可以让我立即获取长目录列表的开头?

答案1

这不是head的错,而是 的ls错。  ls几乎总是对输出进行排序(默认情况下,按名称排序;如果要求,则按日期排序)。任何排序的本质都是,在读取整个输入之前,它无法产生任何输出。  find不对输出进行排序,因此它可以更快地开始生成。

您可以通过运行来亲自看到这一点

ls

find

并观察响应时间的差异。

顺便说一句,您可以ls通过指定来列出目录而无需排序-U

相关内容