Обзор
Быстрый поиск и обработка нужных файлов в среде Linux — это базовая и необходимая компетенция для системного администрирования и разработки. В этой статье мы шаг за шагом на практических примерах разберем основные параметры поиска команды find, поиск по размеру и времени изменения файлов, а также пакетную обработку результатов поиска с помощью -exec.
Подготовка окружения и базовый поиск по имени файла
Чтобы создать специальную директорию для практической работы с командой find и перейти в нее, выполните команду mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab.

Чтобы создать тестовые файлы с различными расширениями для проверки поиска, выполните команду touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak.

Команда find рекурсивно ищет все файлы и каталоги по заданным условиям внутри указанного пути.
При выполнении команды find . -name "*.log" выполняется поиск всех файлов с расширением .log, начиная с текущего каталога (.), и выводятся их пути.
При этом шаблон поиска заключается в двойные кавычки, чтобы предотвратить предварительное раскрытие подстановочного знака (*) командной оболочкой.
⚙️ [Основные опции]
-name : поиск элементов, соответствующих указанному имени файла или шаблону с учетом регистра.-iname : поиск элементов, соответствующих указанному имени файла или шаблону без учета регистра.-type : указание типа искомого объекта (f — обычный файл, d — каталог).-size : поиск по размеру файла (+ — больше указанного, - — меньше указанного).-mtime : поиск по времени последнего изменения содержимого файла (в днях).-empty : поиск пустых файлов или пустых каталогов.-exec : пакетное выполнение указанной команды Linux для каждого найденного файла.-delete : немедленное удаление файлов, соответствующих условиям поиска.

Для поиска имени файла без учета регистра выполните команду find . -iname "GUIDE.TXT" с опцией -iname.
Даже если фактическое имя файла написано в нижнем регистре как guide.txt, оно соответствует условию поиска в верхнем регистре, и путь к файлу корректно отображается.

Поиск больших файлов по типу и размеру
Чтобы протестировать поиск файлов по размеру, выполните команду truncate -s 15M ~/find_lab/backup/large_archive.iso, создающую тестовый файл большого размера (15 МБ).

Для дополнительной практики сравнения по размеру выполните команду truncate -s 2M ~/find_lab/logs/big_trace.log, создающую тестовый файл лога размером 2 МБ.

Чтобы отфильтровать только каталоги, исключив обычные файлы, выполните команду find ~/find_lab -type d с опцией -type d.
На экран выводится только список всех подкаталогов, расположенных по указанному пути.

Чтобы найти среди обычных файлов (-type f) файлы размером более 10 МБ (-size +10M) и просмотреть подробную информацию о них, выполните команду find ~/find_lab -type f -size +10M -exec ls -lh {} +.
Будет найден файл large_archive.iso размером 15 МБ, удовлетворяющий условию, и выведены подробные сведения о правах доступа и его размере.

Поиск измененных файлов по времени (mtime/mmin)
Для практического поиска файлов по истекшему времени выполните команду touch -d "2 days ago" ~/find_lab/backup/old_backup.tar, создающую тестовый файл со временем изменения двухдневной давности.

Для проверки поиска недавно измененных файлов выполните команду touch ~/find_lab/logs/recent.log, создающую тестовый файл с текущей временной меткой.

Чтобы найти обычные файлы, измененные за последние 24 часа, выполните команду find ~/find_lab -type f -mtime -1 с опцией -mtime -1.
Корректно отображается список всех файлов, созданных или измененных в пределах контрольного интервала времени (24 часа).

Чтобы найти старые файлы, которые были изменены более 24 часов (1 день) назад, выполните команду find ~/find_lab -type f -mtime +1 с опцией -mtime +1.
В выводе будет точно отфильтрован только файл old_backup.tar, созданный с датой двухдневной давности.

Пакетная обработка результатов поиска: опция -exec и удаление
Для практики пакетного управления и изменения прав доступа выполните команду mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp, создающую временную директорию и тестовые временные файлы.

Чтобы одновременно изменить права доступа для всех найденных файлов с расширением .tmp на 644, выполните команду find ~/find_lab/temp -name "*.tmp" -exec chmod 644 {} \; с опцией -exec.
Символ {} заменяется путем к каждому найденному файлу, а \; обозначает конец команды, передаваемой в конструкцию -exec.

Чтобы убедиться, что права доступа успешно применились, выполните команду ls -l ~/find_lab/temp.
В выводе можно подтвердить, что для обоих временных файлов установлены права на чтение и запись (-rw-r--r--, 644).

Чтобы удалить все файлы .tmp, соответствующие условиям поиска, выполните команду find ~/find_lab/temp -name "*.tmp" -exec rm -f {} \;, комбинируя поиск с командой rm -f.
Все найденные целевые файлы удаляются за один шаг без дополнительных запросов на подтверждение.

Чтобы окончательно убедиться в успешном удалении всех временных файлов, выполните команду ls -la ~/find_lab/temp.
Результат показывает, что остались только текущий каталог (.) и родительский каталог (..), а все созданные временные файлы были полностью удалены.

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