Відповіді:
Ви можете передавати вихід findчерез head:
find . -name '*.txt' | head -n 3
headзапускається і чекає введення з лівої частини труби. Потім findзапускається і шукає файли, які відповідають заданим критеріям, надсилаючи його вихід через трубу. Коли headотримано та роздрукується кількість запитуваних рядків, вона припиняється, закриваючи трубу. findпомічає закриту трубу, і вона також припиняється. Простий, елегантний та ефективний.
-n 3є POSIX сумісної , і тому , ймовірно, буде більш стерпним.
Ця інша відповідь дещо хибна. Команда є
find . -name '*.txt' | head -n 3
Тоді є пояснення в одному з коментарів [акцент мій]:
headзапускається і чекає введення з лівої частини труби. Потімfindзапускається і шукає файли, які відповідають заданим критеріям, надсилаючи його вихід через трубу. Колиheadотримано та роздрукується кількість запитуваних рядків, вона припиняється, закриваючи трубу.findпомічає закриту трубу, і вона також припиняється. Простий, елегантний та ефективний .
Це майже правда.
Проблема полягає в тому, що він findпомічає закриту трубу лише тоді, коли вона намагається написати їй - у цьому випадку це коли знайдеться 4-й збіг. Але якщо не буде 4-го матчу, то findпродовжимо. Ваша оболонка буде чекати! Якщо це трапляється в сценарії, сценарій буде чекати, незважаючи на те, що ми вже знаємо, що вихідна труба є остаточною, і до неї нічого не можна додати. Не так ефективно.
Ефект мізерний, якщо цей конкретний процес findшвидко закінчується сам по собі, але при складному пошуку у великому дереві файлів команда може зайво затримувати все, що ви хочете зробити далі.
Не дуже досконале рішення - запустити
( find … & ) | head -n 3
Таким чином при headвиході оболонка продовжується негайно. Фоновий findпроцес може тоді ігноруватися (він закінчиться рано чи пізно) або націлений на pkillщось чи щось.
Щоб довести концепцію, яку ви можете шукати /. Ми очікуємо лише одного поєдинку, але шукаємо findйого скрізь, і це може зайняти багато часу.
find / -wholename / 2>/dev/null | head -n 1
Скасуйте його Ctrl+, Cяк тільки побачите проблему. Тепер порівняйте:
pidof find ; ( find / -wholename / 2>/dev/null & ) | head -n 1 ; pidof find
find . -name '*.txt' -print -quitлише показ першого матчу таfindвипуск після першого матчу. Я не знаю, чи можна адаптуватися до справи "вихід після пошуку n збігів".