Полное руководство по команде find в Linux

Обзор

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

Подготовка окружения и базовый поиск по имени файла

Чтобы создать специальную директорию для практической работы с командой find и перейти в нее, выполните команду mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab.

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.

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 . -name “*.log”

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

find . -iname “GUIDE.TXT”

Поиск больших файлов по типу и размеру

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

truncate -s 15M ~/find_lab/backup/large_archive.iso

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

truncate -s 2M ~/find_lab/logs/big_trace.log

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

find ~/find_lab -type d

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

find ~/find_lab -type f -size +10M -exec ls -lh {} +

Поиск измененных файлов по времени (mtime/mmin)

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

touch -d “2 days ago” ~/find_lab/backup/old_backup.tar

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

touch ~/find_lab/logs/recent.log

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

find ~/find_lab -type f -mtime -1

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

find ~/find_lab -type f -mtime +1

Пакетная обработка результатов поиска: опция -exec и удаление

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

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.

find ~/find_lab/temp -name “*.tmp” -exec chmod 644 {} ;

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

ls -l ~/find_lab/temp

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

find ~/find_lab/temp -name “*.tmp” -exec rm -f {} ;

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

ls -la ~/find_lab/temp

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