Skip to content

Команда find

Описание

Команда find используется для рекурсивного поиска файлов и директорий в указанной директории (или дереве каталогов), соответствующих заданным критериям. Это может быть поиск: - По имени - По типу файла - По дате изменения - По размеру - По правам доступа - По владельцу - И многим другим параметрам

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


Синтаксис

find [путь(и)] [выражения]

Примеры использования

1. Поиск всех файлов в текущей директории

find .

Начнёт поиск со знаком . — текущая директория.

2. Поиск файлов по имени

find /home/user -name "файл.txt"

Найдёт все файлы с именем файл.txt в домашней директории пользователя.

Для частичного совпадения используйте шаблоны:

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

3. Поиск по типу файла

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

Найдёт только файлы (f) с расширением .conf.

Тип Описание
f Обычный файл
d Каталог
l Символическая ссылка
c Файл устройства (символьный)
b Файл устройства (блочный)
p Именованный канал (FIFO)
s Сокет

4. Поиск по размеру

find /var/log -size +10M

Найдёт файлы больше 10 мегабайт.

Модификатор Значение
b Блоки (512 байт) — по умолчанию
c Байты
k Килобайты
M Мегабайты
G Гигабайты

5. Поиск по дате изменения

find . -mtime -7

Найдёт файлы, изменённые за последние 7 дней.

Выражение Описание
-mtime N Изменено ровно N*24 часов назад
-mtime +N Изменено более чем N дней назад
-mtime -N Изменено менее чем N дней назад
-atime Время последнего доступа
-ctime Время изменения inode
-mmin, -amin, -cmin То же, но в минутах

6. Поиск по правам доступа

find /var/www -perm 777

Найдёт файлы с правами 777.

Можно использовать символическую запись:

find . -perm -u+x

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

7. Поиск по владельцу

find /home -user username

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

Также можно искать по группе:

find /var/log -group adm

8. Удаление найденных файлов

find /tmp -name "*.tmp" -delete

Удалит все временные файлы с расширением .tmp в /tmp.

Или через -exec:

find . -name "*.bak" -exec rm {} \;

Полезные выражения и операторы

Выражение Описание
-name Совпадение по имени (чувствителен к регистру)
-iname Совпадение по имени без учёта регистра
-empty Пустые файлы или каталоги
-executable Исполняемые файлы
-readable, -writable Читаемые/записываемые файлы
-links N Файлы с N жёсткими ссылками
-newer file Файлы, изменённые позже, чем указанный файл
-regex "pattern" Совпадение с регулярным выражением
-maxdepth N Максимальная глубина поиска
-mindepth N Минимальная глубина поиска

Агрегация результатов

1. Подсчёт количества файлов

find /path -type f | wc -l

2. Сортировка результатов

find . -name "*.txt" | sort

3. Показать только полные пути

find . -name "*.py" -printf "%p\n"

Альтернативы

Инструмент Когда использовать
locate Для быстрого поиска с помощью предварительно созданной базы
which / whereis Для поиска исполняемых файлов
realpath Для вывода абсолютного пути
fd Современная альтернатива find с удобным синтаксисом и скоростью
tree Для отображения структуры каталогов в виде дерева

Пример работы

  1. Создайте тестовые файлы: bash mkdir testdir && cd testdir touch file1.txt file2.log file3.txt

  2. Найдите текстовые файлы: bash find . -name "*.txt" Результат: ./file1.txt ./file3.txt

  3. Удалите лог-файлы: bash find . -name "*.log" -delete


Полезные советы

  • Используйте -print (по умолчанию) для вывода результатов.
  • Для безопасности перед удалением проверьте, что вы действительно хотите удалить: bash find . -name "*.tmp" -print
  • Используйте -exec для запуска других команд над найденными файлами.
  • Используйте -maxdepth для ограничения глубины поиска.