Когда кто-то бежит
ls | head
head, похоже, ждет полного вывода команды piped перед печатью на экране. Это нежелательно, когда выполнение команды займет очень много времени, например, когда вы запускаете ls в каталоге, содержащем миллионы файлов.
Однако, когда кто-то бежит
find | head
Головка НЕ ждет полного вывода, прежде чем начать печатать на экране — она делает это в режиме реального времени.
Мой вопрос таков: в чем разница между find и ls, которая вызывает эту разницу в поведении? Во-вторых, есть ли команда-заменитель (либо для ls, либо для head), которая позволит мне мгновенно получить head длинного списка каталогов?
решение1
Это не head
вина ; это ls
.
ls
почти всегда сортирует свой вывод (по умолчанию по имени; если требуется, по дате). И это в природе любого сорта, что он не может произвести какой-либо вывод, пока не прочитает весь ввод.
find
не сортирует свой вывод, поэтому он может начать производить быстрее.
Вы могли бы убедиться в этом сами, просто запустив
ls
и
find
и наблюдение за разницей во времени отклика.
Кстати, вы можете получить ls
список каталогов без сортировки, указав -U
.