Команда 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 |
Для отображения структуры каталогов в виде дерева |
Пример работы
-
Создайте тестовые файлы:
bash mkdir testdir && cd testdir touch file1.txt file2.log file3.txt
-
Найдите текстовые файлы:
bash find . -name "*.txt"
Результат:./file1.txt ./file3.txt
-
Удалите лог-файлы:
bash find . -name "*.log" -delete
Полезные советы
- Используйте
-print
(по умолчанию) для вывода результатов. - Для безопасности перед удалением проверьте, что вы действительно хотите удалить:
bash find . -name "*.tmp" -print
- Используйте
-exec
для запуска других команд над найденными файлами. - Используйте
-maxdepth
для ограничения глубины поиска.