当一个人跑步时
ls | head
head 似乎要等待管道命令的完整输出后才打印到屏幕上。当命令需要很长时间才能运行时,例如在包含数百万个文件的目录上运行 ls 时,这种情况是不可取的。
然而,当一个人跑的时候
find | head
head 并不会等待完整的输出之后才开始打印到屏幕上 - 它似乎是实时地完成的。
我的问题是: find 和 ls 之间的区别是什么,导致了这种行为上的差异?其次,是否有一个替换命令(用于 ls 或 head)可以让我立即获取长目录列表的开头?
答案1
这不是head
的错,而是 的ls
错。
ls
几乎总是对输出进行排序(默认情况下,按名称排序;如果要求,则按日期排序)。任何排序的本质都是,在读取整个输入之前,它无法产生任何输出。
find
不对输出进行排序,因此它可以更快地开始生成。
您可以通过运行来亲自看到这一点
ls
和
find
并观察响应时间的差异。
顺便说一句,您可以ls
通过指定来列出目录而无需排序-U
。