


Команда find обходит выбранное дерево каталогов и проверяет условия для найденных объектов. Начните с точного каталога, типа файла и маски имени. Во всех примерах ниже выполняется только поиск с выводом путей, без удаления или изменения файлов.
На Mentoring.digital разберём GNU find в Linux. Предполагается, что в текущем каталоге есть учебная папка demo. Параметры GNU и других реализаций find могут различаться.
find ./demo -type f -name '*.log' -print
find ./demo -type f -iname '*.log' -print
find ./demo -type d -name 'cache' -print
Первая команда ищет обычные файлы с указанной маской, вторая делает сравнение имени без учёта регистра, третья ищет каталоги cache. Одинарные кавычки не дают оболочке раскрыть звёздочку до запуска find. Без них результат может зависеть от файлов в текущей папке.
Параметр -name проверяет базовое имя. Если условие относится к пути с каталогами, нужен -path. Начальная точка ./demo делает область поиска явной и помогает не обходить весь диск без необходимости.
find ./demo -type f \( -name '*.log' -o -name '*.txt' \) -print
Скобки объединяют альтернативы, -o означает «или». Они экранированы, чтобы оболочка передала их программе. Условия без явного оператора соединяются через «и», которое имеет более высокий приоритет, чем «или».
Поэтому удаление скобок меняет логику. Часть файлов может не пройти проверку типа или не дойти до -print так, как ожидалось. Проверяйте выражение на небольшом наборе с нужными и ненужными расширениями, а также каталогом, имя которого заканчивается на .log.
find ./demo -type f -mtime 0 -print
find ./demo -type f -mtime 1 -print
find ./demo -type f -mmin -30 -print
-mtime 0 выбирает файлы, изменённые менее 24 часов назад. -mtime 1 относится к интервалу от 24 до 48 часов: число завершённых суток округляется вниз. Это не автоматически «сегодня» и «вчера» по календарю. Для календарного отсчёта в GNU find существует -daystart, который влияет на следующие за ним проверки времени.
-mmin -30 ищет изменения за последние 30 минут. Здесь проверяется время изменения содержимого, а не дата создания. При переносе файлов или рассинхронизации часов интерпретацию времён нужно проверять отдельно.
Отсутствие путей в выводе не всегда означает отсутствие файлов. Проверьте стартовую папку, регистр имени, маску, тип и сообщения об ошибках доступа. Не скрывайте stderr во время диагностики: иначе пропущенные каталоги станут незаметны.
По умолчанию find не обходит символические ссылки как обычные каталоги. Включать следование по ссылкам следует осознанно, учитывая область обхода. Для передачи найденных имён другой программе обычный построчный вывод неудобен, если имя содержит перевод строки. В GNU find для таких цепочек предусмотрен -print0 с нулевым разделителем и совместимым получателем.
Проверьте пример на файлах report.log, REPORT.LOG, notes.txt и папке old.log. Сначала убедитесь в правильности списка. Любую последующую операцию над найденными файлами рассматривайте отдельно от поиска.
Основы командной строки доступны на курсах Linux. Разобрать выражение поиска и права доступа поможет наставник по Linux.