Head ожидает заполнения stdin перед печатью

Head ожидает заполнения stdin перед печатью

Когда кто-то бежит

ls | head

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

Однако, когда кто-то бежит

find | head

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

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

решение1

Это не headвина ; это lslsпочти всегда сортирует свой вывод (по умолчанию по имени; если требуется, по дате). И это в природе любого сорта, что он не может произвести какой-либо вывод, пока не прочитает весь ввод.  findне сортирует свой вывод, поэтому он может начать производить быстрее.

Вы могли бы убедиться в этом сами, просто запустив

ls

и

find

и наблюдение за разницей во времени отклика.

Кстати, вы можете получить lsсписок каталогов без сортировки, указав -U.

Связанный контент