# Поиск файлов и в файлах

Регулярные выражения -- это мощное средство для поиска информации в текстовых данных.
Началу знакомства ими мы положили на предыдущем занятии, изучив подстановку имен файлов.
В ней мы применили два метасимвола (`*` и `?`) и два оператора (`[...]` и `[!...]`).

<!-- Где понадобится -->

<!--
Поиск файлов в системе, поиск внутри файла и поиск в потоке, выборка (отбор, фильтрация)
только интересующих данных, обработка логов (сборки программ, серверов).
-->

<!-- Что узнаете -->

## Утилита `grep`

<!-- https://stackoverflow.com/questions/16956810/find-all-files-containing-a-specific-text-string-on-linux -->

* `-r`, `-R` рекурсивный поиск;
* `-n`, нумерация строки;
* `-w`, совпадение по полному слову;
* `-l`
* `-e` поисковый шаблон.
* `--include`, `--exclude`, `--exclude-dir`

<!--
Семейство команд grep -- grep, egrep, fgrep. Мы рассмотрим первую из них -- grep.
Общий формат команды выглядит как
grep [параметры] регулярное_выражение [файл]
Она ищет в файлах строки, соответствующие регулярному выражению. Если файл не задан,
то текст берется из стандартного входного потока. Если регулярное выражение содержит пробелы,
то его берут в двойные кавычки.
Обычно для сборки программ в Unix-подобных ОС используют утилиту `make`. Она позволяет
ускорить процесс сборки, если воспользоваться ее параллельным запуском. Параметр -j (--jobs) задает количество одновременно исполняемых процессов. Рекомендуется задавать процессов на один больше, чем процессоров.
Так как один из процессов будет управляющим.
Как вычислить количество ядер/процессоров?
`grep -c ^processor proc/cpuinfo`
Файл `proc/cpuinfo` содержит информацию о процессорах системы.
-->

## Утилита `find`

* `-type`
* `-name`
* `-size`

`find ~ -type d` ищет каталоги в домашнем каталоге.


## Утилита locate


## Вопросы для самоконтроля


## Упражнения

1. Подсчитайте количество файлов, каталогов, файлов и каталогов в домашнем каталоге.

<!--
ls -l | grep "^d" -- вывод только каталогов
-->
