find

Что делает команда find в Linux

Команда find в Linux используется для поиска файлов и каталогов по множеству критериев: имени, типу, размеру, дате изменения, правам доступа и другим атрибутам. Она сканирует файловую систему рекурсивно, начиная с указанного каталога, и выполняет заданные действия с найденными файлами.

Основной синтаксис команды:

Bash
find [путь] [условия] [действия]

Например:

Bash
find /home/user -name "file.txt"

Эта команда ищет файл с именем file.txt в каталоге /home/user и всех его подкаталогах.

Основные параметры команды find в Linux

Поиск по имени файла (-name и -iname)

Для поиска по имени используется флаг -name. Если нужно игнорировать регистр букв — применяется -iname.

Bash
find /var/log -name "*.log"

Поиск всех лог-файлов в каталоге /var/log.

Bash
find /home -iname "readme.txt"

Поиск файла readme.txt без учёта регистра.

Совет: если имена файлов содержат пробелы, всегда заключай шаблон в кавычки, иначе командная оболочка может интерпретировать его неправильно.

Поиск по типу файла (-type)

Команда find умеет различать типы объектов в файловой системе.
Наиболее часто используемые значения параметра -type:

  • f — обычный файл
  • d — каталог
  • l — символическая ссылка
  • c — символьное устройство
  • b — блочное устройство

Примеры:

Bash
find /etc -type d

Поиск всех каталогов в /etc.

Bash
find /dev -type b

Поиск блочных устройств в /dev.

Поиск по размеру файла (-size)

Параметр -size позволяет находить файлы по их размеру.
Используются суффиксы:

  • c — байты
  • k — килобайты
  • M — мегабайты
  • G — гигабайты

Примеры:

Bash
find /var -size +100M

Найти файлы больше 100 мегабайт.

Bash
find /tmp -size -500k

Найти файлы меньше 500 килобайт.

Знак + означает «больше», а - — «меньше». Если не указать знак, будет найден файл точно указанного размера.

Поиск по дате изменения (-mtime, -ctime, -atime)

Команда find в Linux позволяет искать файлы по времени изменения, создания или последнего доступа.

  • -mtime — по дате изменения содержимого
  • -ctime — по дате изменения метаданных
  • -atime — по дате последнего доступа

Примеры:

Bash
find /var/log -mtime -3

Найти файлы, изменённые менее 3 дней назад.

Bash
find /home -atime +10

Найти файлы, к которым не обращались более 10 дней.

Совет: при очистке старых логов удобно использовать -mtime вместе с -delete, чтобы автоматически удалять устаревшие файлы.

Поиск по правам доступа (-perm)

Параметр -perm позволяет искать файлы с определёнными правами доступа.

Bash
find /usr/bin -perm 755

Поиск исполняемых файлов с правами rwxr-xr-x.

Можно использовать символы:

  • - — «как минимум эти права»
  • / — «любые из этих прав»

Например:

Bash
find / -perm -002

Найти файлы, доступные на запись всем пользователям.

Поиск по владельцу (-user, -group)

Чтобы искать файлы, принадлежащие определённому пользователю или группе:

Bash
find /home -user alex

Ищет все файлы, принадлежащие пользователю alex.

Bash
find /data -group developers

Ищет файлы, принадлежащие группе developers.

Комбинированные условия (-and, -or, -not)

Команда find в Linux поддерживает логические операторы для комбинирования условий.

Примеры:

Bash
find /home -type f -and -name "*.py"

Ищет только файлы с расширением .py.

Bash
find /etc -type f -not -name "*.conf"

Ищет файлы, не имеющие расширения .conf.

Bash
find /var -name "*.log" -or -name "*.txt"

Поиск всех файлов с расширениями .log или .txt.

Выполнение действий над найденными файлами (-exec и -delete)

После поиска можно выполнить действие с каждым найденным файлом.

Параметр -exec

Bash
find /home -type f -name "*.tmp" -exec rm {} \;

Удаляет все временные файлы (.tmp).
Фигурные скобки {} заменяются на имя найденного файла, а \; завершает команду.

Параметр -delete

Более короткий способ удаления:

Bash
find /tmp -type f -name "*.log" -delete

Удаляет все лог-файлы в /tmp.

Совет: всегда тестируй команду без -delete сначала, добавив -print, чтобы убедиться, что удаляются нужные файлы.

Ограничение глубины поиска (-maxdepth и -mindepth)

Иногда нужно ограничить глубину рекурсивного поиска:

Bash
find /home -maxdepth 1 -type f

Ищет только файлы в самом каталоге /home, без захода в подкаталоги.

Bash
find /home -mindepth 2 -type d

Ищет каталоги, начиная с уровня ниже второго.

Практические примеры использования команды find в Linux

  • Найти и удалить старые бэкапы:
Bash
find /backups -name "*.tar.gz" -mtime +30 -delete
  • Найти все исполняемые файлы размером более 10 МБ:
Bash
find /usr/bin -type f -size +10M -perm /111
  • Найти все пустые каталоги:
Bash
find /home -type d -empty
  • Найти файлы с определёнными правами и изменить их:
Bash
find /var/www -type f -perm 777 -exec chmod 644 {} \;

Эти примеры показывают, насколько мощной и гибкой является команда find в Linux. Она незаменима при администрировании систем, автоматизации задач и очистке файловой системы.

Полезные советы при работе с командой find в Linux

Совет: всегда используйте абсолютные пути (/home, /var) вместо относительных, чтобы избежать ошибок при запуске из скриптов.
Совет: для ускорения поиска по большим каталогам можно использовать комбинацию find с xargs: find /var/log -name "*.log" | xargs grep "error" Такой способ быстрее обрабатывает большое количество файлов.

Команда find в Linux — мощный инструмент для поиска и управления файлами. Она поддерживает десятки параметров, логические условия и позволяет выполнять действия с найденными объектами. Умение эффективно использовать find делает работу администратора или инженера гораздо продуктивнее.