Поиск директорий в Linux с помощью find

Быстрые ссылки
- Поиск директорий
- Поиск с регулярными выражениями
- Использование grep с find
Кратко о команде find
Определение: find — утилита для рекурсивного поиска файлов и директорий по различным критериям (имя, тип, время, размер, права и т.д.).
Нюанс: по умолчанию find обходит подкаталоги рекурсивно. Чтобы искать только директории, используйте флаг -type d.
Совет: в скриптах выбирайте абсолютные или относительные пути последовательно — вывод find будет соответствовать тому виду пути, который вы указали в команде.
Поиск директорий
Чтобы найти директорию с точным именем в текущей папке и всех подкаталогах, используйте:
find . -type d -name "search"Пояснение: флаг -type d ограничивает поиск только до директорий. -name делает точное (с учётом регистрозависимости) совпадение с шаблоном.
Если нужно найти директории, имя которых содержит подстроку, добавьте подстановочные символы:
find . -type d -name "*search*"Это найдет любой каталог, в имени которого содержится “search”.
Важная деталь: -name сравнивает только базовое имя каталога, а не весь путь. Если нужно сопоставлять по пути относительно корня или включать родительские директории в сопоставление, смотрите секцию про регулярные выражения.

Примеры полезных опций
- Ограничить глубину поиска:
find . -maxdepth 2 -type d -name "*cache*"- Исключить каталог из поиска (prune):
find . -path "./node_modules" -prune -o -type d -name "*test*" -print- Обработка имён с пробелами и передачa в xargs:
find . -type d -name "*my dir*" -print0 | xargs -0 ls -ld- Использовать -printf для форматирования вывода:
find . -type d -name "*cache*" -printf "%p\n"Поиск с регулярными выражениями
Регулярные выражения полезны, когда нужно сопоставлять весь путь, а не только имя каталога. Для этого используйте -regextype и -regex. Пример с sed-совместимым синтаксисом:
find . -type d -regextype sed -regex ".*one\/.*"Пояснение: выражение “.one\/.“ найдет все каталоги, у которых в пути есть компонент, заканчивающийся на “one” — например “phone/“, и затем любой дочерний каталог. Обратите внимание, что в регулярных выражениях find сопоставляет весь путь, начиная с точки, если вы запускаете команду из текущей директории.
Полезные варианты:
- -iregex — нечувствительный к регистру режим
- -regextype posix-extended — расширенный POSIX-совместимый синтаксис

Важно: регулярные выражения мощные, но их легко пере- или недоопределить. Тестируйте выражения на небольших деревьях перед применением к большому объему данных.
Использование grep с find
Иногда удобнее сначала получить список директорий от find, а затем отфильтровать его текстовым инструментом, например grep:
find . -type d | grep fooЭто простая и наглядная комбинация: find генерирует список путей, а grep ищет подстроки и подсвечивает совпадения.
Если в путях возможны пробелы или специальные символы, лучше применять -print0 и использовать сопутствующие инструменты, совместимые с нулевым байтом метода:
find . -type d -print0 | tr '\0' '\n' | grep "foo"
Альтернативные инструменты
- fd (https://github.com/sharkdp/fd) — быстрый и удобный аналог find с синтаксисом по умолчанию, ориентированным на пользователей.
- rg (ripgrep) — очень быстрый grep, но для поиска по содержимому, а не по структуре директорий.
- locate/updatedb — использует индекс базы данных, подходит для очень быстрых запросов, но данные могут быть неактуальны.
Когда использовать альтернативы: для интерактивной работы и быстрого прототипирования часто удобнее fd; для скриптов, где важна гибкость критериев (время, размер, права), find остаётся незаменимым.
Практическая методология поиска директорий
- Определите цель поиска: точное имя, подстрока в имени, или соответствие по пути.
- Ограничьте область поиска (директория старта, -maxdepth) чтобы ускорить выполнение.
- Сначала выполните “сухой” прогон без -exec, проверьте вывод.
- При необходимости используйте -print0 и xargs -0 для безопасной передачи имён с пробелами.
- Добавляйте -exec только после верификации результатов; в скриптах используйте echo или ls для теста.
Полезные эвристики и шаблоны
- Если вы ищете часто и хотите интерактивный отклик, попробуйте fd.
- Для больших ФС избегайте запуска find в / без фильтров: это затратно по времени и ресурсам.
- Для регистронезависимых совпадений используйте -iname или -iregex.
- Чтобы исключить определённые ветки дерева, применяйте -prune с -o.
Критерии приёмки
- Скрипт возвращает только директории, не файлы (проверка -type d).
- Вывод корректно обрабатывается при наличии пробелов и спецсимволов в именах.
- Поиск ограничен рабочим подмножеством при необходимости (-maxdepth, -path с -prune).
- Перед выполнением опасных операций (удаление, перемещение) результаты проверены вручную.
Безопасность и хорошие практики
Важно: не запускайте конструкцию вроде find . -type d -exec rm -rf {} \; до тех пор, пока не уверены в результатах. Всегда сначала замените -exec на -print или echo для верификации. В скриптах фиксируйте стартовую директорию переменной и работайте с ней явно.
Краткое резюме
find — гибкий инструмент для поиска директорий и файлов. Для простых случаев используйте -type d с -name и шаблонами; для поиска по полному пути применяйте -regex; для постобработки — пайп в grep или xargs. Тестируйте выражения и избегайте выполнения опасных команд до проверки результатов.
Ключевые команды-образцы для быстрой копии:
find /path/to/start -type d -name "*pattern*"
find . -type d -regextype posix-extended -regex ".*/(foo|bar)/.*"
find . -type d -print0 | xargs -0 -I{} ls -ld "{}"Сопроводительный список шагов: определите цель → сузьте область → прогон с выводом → проверка → безопасное действие.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента