Гид по технологиям

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

• 4 min read • Linux • Обновлено 18 Nov 2025
Поиск директорий в Linux с помощью find
Поиск директорий в Linux с помощью find

Окружение Bash в терминале

Быстрые ссылки

  • Поиск директорий
  • Поиск с регулярными выражениями
  • Использование 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"

Фильтрация вывода find через grep

Альтернативные инструменты

  • fd (https://github.com/sharkdp/fd) — быстрый и удобный аналог find с синтаксисом по умолчанию, ориентированным на пользователей.
  • rg (ripgrep) — очень быстрый grep, но для поиска по содержимому, а не по структуре директорий.
  • locate/updatedb — использует индекс базы данных, подходит для очень быстрых запросов, но данные могут быть неактуальны.

Когда использовать альтернативы: для интерактивной работы и быстрого прототипирования часто удобнее fd; для скриптов, где важна гибкость критериев (время, размер, права), find остаётся незаменимым.

Практическая методология поиска директорий

  1. Определите цель поиска: точное имя, подстрока в имени, или соответствие по пути.
  2. Ограничьте область поиска (директория старта, -maxdepth) чтобы ускорить выполнение.
  3. Сначала выполните “сухой” прогон без -exec, проверьте вывод.
  4. При необходимости используйте -print0 и xargs -0 для безопасной передачи имён с пробелами.
  5. Добавляйте -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 "{}"

Сопроводительный список шагов: определите цель → сузьте область → прогон с выводом → проверка → безопасное действие.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро