Команда find предназначена для поиска файлов и папок в файловой системе Linux. Она может быть использована для поиска файлов по имени, типу, размеру, дате изменения и другим критериям. Команда find может быть очень полезной в различных сценариях, например, при поиске конкретного файла в большой файловой системе или при поиске файлов, которые были изменены в течение определенного периода времени.

Как использовать команду find

Команда «find» имеет следующий синтаксис:

find [path] [expression]

где «path» — это путь к каталогу, в котором вы хотите искать файлы, а «expression» — это выражение, которое определяет критерии поиска.

Поиск по типу

Параметр -type позволяет искать файлы по типу, которые бывают следующих видов:

  • f – простые файлы.
  • d – каталоги.
  • l – символические ссылки.
  • b – блочные устройства (dev).
  • c – символьные устройства (dev).
  • p – именованные каналы.
  • s – сокеты.

Например, вот так, будут найдены только каталоги внутри текущего:

find . -type d
Поиск по имени

Для поиска по имени используется параметр -name. Например, команда для поиска всех файлов с расширением .txt в каталоге /home/ будет выглядеть так:

find /home/ -type f -name "*.txt"

Найти все папки с именем my_folder в текущем каталоге можно так:

find . -type d -name "my_folder"
Поиск по размеру файла

Для поиска по размеру используется параметр -size.

  • + — Поиск файлов больше заданного размера
  •  — Поиск файлов меньше заданного размера
  • Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.

Единицы измерения указываются так:

  • c — Байт
  • k — Кбайт
  • M — Мбайт
  • G — Гбайт

Например, найти все файлы, в каталоге /home/ с размером больше 100 Мбайт можно так:

find /home/ -size +100M
Поиск пустых файлов и каталогов

Для поиска пустых папок и файлов используется параметр -empty. Например, найдём все пустые файлы и папки в каталоге /home/:

find /home/ -empty
Поиск файлов по дате

Доступны следующие параметры:

  • -mtime — Время изменения файла. Указывается в днях.
  • -mmin — Время изменения в минутах.
  • -atime — Время последнего обращения к объекту в днях.
  • -amin — Время последнего обращения в минутах.
  • -ctime — Последнее изменение владельца или прав на объект в днях.
  • -cmin — Последнее изменение владельца или прав в минутах.

Например, найдём все файлы, изменённые в каталоге /home/ за последние 60 минут:

find /home/ -cmin -60

А если мы наоборот, хотим найти все файлы, изменённые раньше, чем час назад, то в команде минус меняем на плюс:

find /home/ -cmin +60

Можно также вывести список файлов с сортировкой по дате модификации.

Например, вот эта команда выведет все файлы из каталога /home/ с сортировкой по дате модификации. Файлы изменённые недавно, окажутся в начале списка:

find /home/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r

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

find /home/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -n

А так, мы можем ограничить количество выводимых результатов. Например вывести только 50:

find /home/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -n | head -n 50
Поиск по пользователю или группе

Для поиска файлов принадлежащих определённому пользователю, или группе, используются параметры -user и -group. Например, найдём в каталоге /home/ все файлы, принадлежащие пользователю admin:

find /home/ -user admin
Поиск по правам доступа

Для поиска по правам доступа используется параметр -perm. Например, найдём все файлы с правами 777 в каталоге /home/:

find /home/ -perm 777
Поиск с использованием логических операторов

При поиске можно использовать логические операторы:

  • -a — Логическое И. Объединяет несколько критериев поиска.
  • -o — Логическое ИЛИ. Ищем на основе одного из критериев поиска.
  • -not или ! — Логическое НЕ.

Например, найдём в каталоге /home/ все файлы начинающиеся на sess_ или заканчивающиеся на tmp:

find /home/ -type f -name "sess_*" -o -name "*tmp"
Исключить из поиска определённые папки

При поиске с помощью команды find, можно исключать определённые каталоги. Например мы хотим найти все файлы с расширением .php, изменённые за последние 2 дня во всех папках сайта, за исключением папок /bitrix/managed_cache/ и /bitrix/cache/:

find /home/www/ -type f -name "*.php" -mtime -1 -not -path "*/bitrix/managed_cache/*" -not -path "*/bitrix/cache/*"
Как удалить найденные файлы

Для удаления найденных файлов можно использовать параметр -delete, дописав его в конце команды поиска.

Например, удалим из папки /tmp/ все файлы старше 10 дней:

find /tmp/ -type f -mtime +10 -delete

Нужна профессиональная удалённая помощь с сервером, сайтом, компьютером или ноутбуком?

Свяжитесь со мной любым удобным для вас способом, и получите её быстро и не дорого.

Обсудить задачу

Помогла статья? Поблагодари автора!

Остались вопросы, или есть что добавить? Добро пожаловать в комментарии.

Угостить автора чашечкой кофе