LinuxNotes
← Все статьи

Find: поиск файлов по имени, размеру и времени

Ищем большие файлы и недавно изменённые документы, корректно обрабатываем пробелы в именах.

Терминал и автоматизация2 мин чтения

Условия примеров

Используется GNU find из пакета findutils в Arch и CachyOS. Все примеры выполняют просмотр и не удаляют файлы. Подставьте существующий каталог вместо ~/Documents, если документы хранятся в другом месте.

Поиск по имени

find ~/Documents -type f -iname '*.pdf'

-type f выбирает обычные файлы, -iname сравнивает имя без учёта регистра. Кавычки вокруг шаблона обязательны: иначе звёздочку может развернуть оболочка до запуска find, и поиск будет зависеть от текущего каталога.

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

Большие и недавно изменённые файлы

find ~/Documents -type f -size +100M
find ~/Documents -type f -mmin -60

В первом примере M означает единицы по 1048576 байт; учитывайте округление размера при сравнении. Второй пример выбирает файлы, изменённые менее часа назад. Это время изменения содержимого, а не надёжная дата создания.

Объединение условий

find ~/Documents -type f \( -iname '*.md' -o -iname '*.txt' \)

Скобки ограничивают действие ИЛИ. Их экранирование не даёт оболочке интерпретировать их самостоятельно. Без группировки часть условий может относиться только к одной ветке выражения.

Выполните команду для найденных файлов

find ~/Documents -type f -name '*.md' -exec wc -l -- {} +

Find передаёт найденные пути непосредственно программе wc, собирая их в группы. Это корректно для пробелов и переводов строк в именах. Разделитель -- завершает параметры wc. Вывод показывает количество строк, а не число слов.

Что не стоит делать

Не перебирайте результаты через for file in $(find ...): оболочка разобьёт пути по пробелам и другим разделителям. Для обработки подходят -exec или NUL-разделители -print0 вместе с инструментами, которые умеют их читать.

Если позже добавляете действие удаления, сначала выполните ту же выборку с -print, проверьте область поиска и резервную копию. В командах этого руководства удаление намеренно не используется.

Для сохранения найденных документов: копирование rsync.

Документация: GNU Findutils.

Читайте дальше