Як я можу рахувати кількість файлів (у каталозі), що містять заданий рядок, як вхід у 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.
greps параметр -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.