Поэтому мне нужно найти все обычные файлы внутри и под каталогом. Для каждого из этих обычных файлов я должен выполнить egrep для шаблона ($ ARG) и выяснить, соответствует ли вывод файла шаблону ($ ARG), если он это сделает, он добавит один к счетчику.

У меня есть команда file:

$count = 0
file *

Однако у меня возникают проблемы при получении egrep & ARG> /dev /null /; echo $? запустить через каждый файл, который появляется из (файл *).

Я понимаю, что файл * | каталог egrep> /dev /null; echo $? выведет 0, потому что он найдет шаблон 'directory' в файле, но у меня возникли проблемы с его циклическим просмотром каждого обычного файла, поэтому я могу добавить его к счетчику при каждом совпадении с шаблоном.

1 ответ1

0

Я думаю, что это будет делать то, что вы хотите. По сути, он создает список всех файлов в каталоге и ниже; затем сканирует их, печатая имя файла с любыми попаданиями; затем он подсчитывает, сколько имен файлов возвращается.

count=$(egrep -l "$ARG" $(find . -type f) | wc -l)

Вполне возможно, что поиск вернет слишком много файлов (вы получите ошибку "Список аргументов слишком длинный"). В этом случае этот более медленный, но более надежный механизм будет работать:

count=$(find . -type f -exec egrep -l "$ARG" {} \; | wc -l)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .