Как ограничить количество результатов вывода gnu find до конкретного числа?
Допустим, в bash требуется использовать только первый результат поиска утилиты find.
При этом не нужно искать всё, т. к. это может быть ресурсозатратно.
В man find я не нашёл ключей для ограничения количества результатов (только ограничения на глубину поиска).
Есть вариант использовать конвейер bash таким образом first_result="$(find -name '*foo*' | head -n 1)"
чтобы find прекращал работу вместе с конвейером, который в свою очередь прекращает работу вместе с head.
Однако это решение не идеально, т. к. в конвейере find всё равно работает [немного] больше, чем надо и находит больше файлов.
Какое решение лучше этого (при каком find на самом деле ищет только один файл)?
а за счёт чего работает такой код для нескольких?
Чтобы вы поняли о чём я спрашиваю:
- ваше решение работает за счёт использования параметра команды find
- решение сформулированное в вопросе работает за счёт конвейера
-- я спрашивал, какая может быть основная фишка такого кода, заставляющая утилиту работать только до тех пор, пока не будет найдено заданное число результатов
unix.stackexchange.com/a/62897
-- мне непонятен этот код, видимо из-за того, что я не знаком с чем-то под названием coproc. Полагаю, в этом и есть та самая фишка
нет
It's short for "co-process" which means a second process cooperating with
the shell. It's very similar to a background job started with an "&" at
the end of the command, except that instead of sharing the same standard
input and output as its parent shell, its standard I/O is connected to
the parent shell by a special kind of pipe called a FIFO (first in, first
out). This allows the parent shell to communicate with the coproc.