конвейер как аргумент -exec find

Насколько я понимаю, CentOS - это просто другая сборка того же исходного кода, который используется для RHEL и который является открытым (это также указано в FAQ по CentOS).

Использование различных опций компиляции не должно сильно повлиять на поведение ОС.

Самое большое различие между этими двумя ОС заключается в скорости выпуска новых версий. Поскольку CentOS по сути является ответвлением RHEL, они всегда медленнее выпускают обновления (потому что RHEL должен быть обновлен первым, прежде чем CentOS сможет перенести изменения). Согласно их FAQ, CentOS обязуется обновлять пакеты в течение 72 часов после обновления RHEL, хотя я знаю, что когда вышла RHEL 7, до выхода CentOS 7 прошло несколько месяцев.

Вы можете углубиться в FAQ по CentOS, чтобы получить больше информации об этом (https://wiki.centos.org/FAQ/General), а также поискать ваш вопрос снова на SE Unix & Linux + Google

Является ли CentOS точно такой же, как RHEL?

https://danielmiessler.com/study/fedora_redhat_centos/

4
10.01.2017, 08:47
2 ответа

Во-первых, команда find завершается не так.

Во-вторых, вы можете просто заменить cat на grep lib .

найти. -name CMakeLists * -exec grep lib '{}' \;

Что в основном означает "выполнить grep lib" для каждого из результатов поиска. Вы даже можете опустить галочки вокруг {}. Должно сработать.

1
27.01.2020, 20:48
find . -type f -name "CMakeLists*" -exec grep lib /dev/null {} +

Эта команда находит файлы в текущем каталоге, чье базовое имя начинается или является строкой CMakeLists . Аргумент экранирован (двойные кавычки), чтобы оболочка не раскрывала его до выполнения find .

Нет необходимости добавлять cat с конвейером к grep - здесь это бесполезный процесс с бесполезным вводом-выводом. Добавление / dev / null гарантирует, что grep сообщит имя файла вместе с совпадающими строками, когда есть более одного файла для сопоставления.

Используя {} + в качестве завершающей последовательности для аргумента -exec , при каждом вызове команды grep передается несколько имен файлов. Если бы мы использовали {} \; , то процесс grep создавался бы для каждого найденного файла . Излишняя инстанциация процесса стоит дорого, если выполняется сотни или тысячи раз.

Чтобы использовать канал с аргументом find -exec , необходимо вызвать оболочку. Надуманным примером может быть grep для строки «один», но только если строка «два» также отсутствует. Это можно сделать так:

find . -type f -name "CMakeLists*" -exec sh -c 'grep one "$@"|grep -v two' sh {} +

Это основано на комментариях, приведенных ниже, @muru, @Serg и @Scott, с благодарностью.

7
27.01.2020, 20:48

Теги

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