Як я можу рахувати кількість файлів (у каталозі), що містять заданий рядок, як вхід у bash / sh?
Як я можу рахувати кількість файлів (у каталозі), що містять заданий рядок, як вхід у bash / sh?
Відповіді:
grep -l "string" * | wc -l
буде шукати "рядок" у вмісті всіх файлів у робочому каталозі та повідомляє, скільки збігається.
grep -lr "string" directory | wc -l
Якщо ви не хочете рекурсивного пошуку, ви можете використовувати параметр find з maxdepth: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
Зверніть увагу, що цей другий варіант повільніше, ніж grep.
grep
s параметр -l
буде виводити тільки ті імена файлів, які відповідають $PATTERN
, wc
їх можна буде потім рахувати.
grep -l "$PATTERN" * | wc -l
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *
Уточнення. Це шукає кількість файлів, які містять "pattern_to_look_for" у своєму вмісті, а не у їхніх іменах (як відповідь Вага). З вашого запитання важко сказати, що ви шукаєте.
find . ! -name . -prune -type f
(не пропустіть зворотних посилань). Ця команда перераховує лише файли в папці.
Це працює в Bash з будь-яким ім'ям файлу:
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
Пояснення:
grep
's -Z
опція друкує кожен результат з ␀-байтового сепаратора. Цей символ не може бути частиною імені файлу, тому ми можемо просто порахувати кількість роздільників, щоб отримати кількість файлів.tr
.wc
.