Команда find используется в linux для осуществления поиска из командной строки. Ниже будут рассмотрены синтаксис, ключи и примеры использования.
Синтаксис команды find
$ find [путь] [опции] [критерии] [действия]
Путь
В качестве пути могут использоваться как абсолютные, так и относительные значения.
Значение | Описание |
. | Поиск от текущего каталога |
/ | Поиск от корневого каталога |
~ | Поиск от домашней папки (переменная HOMEDIR) |
Опции
Значение | Описание |
-name шаблон | Поиск по шаблону имени файла |
-size N[ckMG] -size +N[ckMG] -size —N[ckMG] |
Размер файла равен N Размер файла больше N Размер файла меньше N с — байт, k — килобайт, M — мегабайт, G — гигабайт |
-type f -type d |
Тип — файл Тип — директория |
-user username | Поиск файлов, принадледащих указанному пользователю |
-group groupname | Поиск файлов, принадледащих указанной группе |
-perm 644 -perm -007 |
Поиск файлов с указанными правами Поиск файлов с учетом только одного указанного бита |
Выводит полные имена файлов в стандартный поток вывода | |
-maxdepth N | Максимальная глубина поиска |
-mindepth N | Минимальная глубина поиска |
-newer filename | Поиск файлов, созданных позднее, чем указанный |
-mount | Поиск файлов только в текущей ФС |
-mtime +N -mtime —N |
Поиск файлов, обновлявшихся в течение последних N дней Поиск файлов, не обновлявшихся в течение последних N дней |
Объединение критериев поиска
Оператор | Описание |
-and | Логическое И. Используется для объединения операторов. Возвращиает true, когда выполняются все условия. |
-not | Логическое НЕ. Используется для исключения. |
-or | Логическое ИЛИ. Возвращиает true, когда выполняется хотя бы одно из условий. |
Для использования указанных операторов, необходимо заключить их в скобки (при этом, скобки выделяются слешом). Пример команды, которая находит в текущем каталоге все файлы размером от 5 до 50 мегабайт:
$ find . \( -size +5M -and -size -50M \)
Действия
Обратите внимание — после большинства действий обязательно ставить \;
Действие | Описание |
-exec команда \; | Выполнить команду для найденного файла |
-ok команда \; | То же самое, что и exec, но для каждого действия будет запрошено подтверждение пользователя |
-execdir команда \; | То же самое, что и exec, но выполнение команды происходит из каталога, содержащего файл |
-okdir команда \; | То же, что и execdir, но запрашивает подтверждения пользователя |
-ls | Выводит подробную информацию о найденных файлах |
Примеры использования команды find
Найти в каталоге /home/user/reports все файлы, название которых начинается на 2016
$ find /home/user/reports -type f -name "2016*"
Найти в домашнем каталоге все файлы с расширением txt и вывести о них подробную информацию
$ find ~ -name “*.txt” -ls
Поиск всех файлов пользователя root в каталоге /etc
$ find /etc -user root
Найти в каталоге /var/www все файлы, которые были обновлены за последнюю неделю.
$ find /var/www -mtime +7
Найти и показать все каталоги начиная от текущего
$ find . -not -type f
В каталоге /var/log найти и удалить все файлы размером более 500Кб, которые не обновлялись более 10 дней.
$ find /var/log -type f -mtime -10 -size +500k -exec rm {} \;
Выполнение команды можно также передать в xargs, это полезно, когда команда find возвращает большое количество значений.
$ find /home/user -name "*.mp3" | xargs echo > /home/user/mp3list