Голова ждет полного ввода перед печатью

371
Shadyjames

Когда бегаешь

ls | head 

Кажется, голова ждет полного вывода команды piped перед печатью на экран. Это нежелательно, когда выполнение команды занимает очень много времени, например, когда вы запускаете ls в каталоге, содержащем миллионы файлов.

Тем не менее, когда один бежит

find | head 

головка НЕ ​​ожидает полного вывода перед началом печати на экран - она ​​делает это в режиме реального времени.

У меня такой вопрос: в чем разница между find и ls, которая вызывает эту разницу в поведении? Во-вторых, есть ли команда замены (для ls или OR для head), которая позволила бы мне мгновенно занять заголовок длинного списка каталогов?

1

1 ответ на вопрос

1
Scott

It's not head's fault; it's ls's.  ls almost always sorts its output (by default, by name; if requested, by date).  And it is in the nature of any sort that it cannot produce any output until it has read the entire input.  find does not sort its output, so it can start producing faster.

You could have seen this for yourself simply by running

ls 

and

find 

and observing the difference in response time.

BTW, you can get ls to list directories without sorting by specifying -U.

Я думаю, `ls -f` запросит несортированный вывод? grawity 9 лет назад 0
Да, `ls -f` также запрашивает несортированный вывод. Это также вызывает параметр `-a`. Я смутно припоминаю, что столкнулся с версией `ls`, в которой` -f` не работал (я думаю, что это определено как что-то другое), но `-U` (но я не помню, где это было, и я может просто неправильно помню). И если подумать, наверное, я слышал, что `-U` не везде принят. Scott 9 лет назад 0

Похожие вопросы