Команда 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
Помогла статья? Поблагодари автора!
Остались вопросы, или есть что добавить? Добро пожаловать в комментарии.
Угостить автора чашечкой кофе