find
— утилита поиска файлов, используемая в UNIX‐подобных операционных системах. Может производить поиск в одной или нескольких директориях с использованием критериев, заданныхпользователем. По умолчанию, find
возвращает все файлы после текущего в рабочей директории. Более того, find
позволяет применять пользователю определённые действия ко всем найденным файлам. Также поддерживаются регулярные выражения.
[править]Список ключей
-name
— искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки.-type
— тип искомого: f=файл, d=каталог, l=ссылка (link).-user
— владелец: имя пользователя или UID.-group
— владелец: группа пользователя или GID.-perm
— указываются права доступа.-size
— размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом).-atime
— время последнего обращения к файлу.-ctime
— время последнего изменения владельца или прав доступа к файлу.-mtime
— время последнего изменения файла.-newer
— искать файлы созданные позже указанной даты.-delete
— удалять найденные файлы.-ls
— генерирует вывод как команда ls -dgils.-print
— показывает на экране найденные файлы.-exec command {} \;
— выполняет над найденным файлом указанную команду; обратите внимание на синтаксис.-ok
— перед выполнением команды указанной в -exec, выдаёт запрос.-depth
— начинать поиск с самых глубоких уровней вложенности, а не с корня каталога.-prune
— используется, когда вы хотите исключить из поиска определённые каталоги.
[править]Поиск в текущей директории
Найти все файлы, начиная с текущей директории, название которых начинается на my.
find . -name 'my*'
[править]Поиск в определенном каталоге
Найти все файлы, начиная с корневой директории, название которых начинается на my.
find / -name 'my*'
Поиск, в директориях /usr/local/man и /opt/local/man, файлов, название которых начинается на my.
find /usr/local/man /opt/local/man -name 'my*'
[править]Поиск по нескольким именам файлов
Найти все файлы, начиная с текущей директории, название которых начинается на my или qu. Обратите внимание, что по умолчанию все аргументы соединены с помощью логического и (опция '-a'). Если необходимо объединить несколько аргументов логическим или - используйте опцию '-o'.
find . \( -name "my*" -o -name "qu*" \) -print
[править]Поиск файлов определенного типа
Эта команда отличается от предыдущей тем, что поиск будет производиться только для регулярных файлов, т.е. в результатах поиска не будет директорий, специальных файлов, символических ссылок и т.д.
find . -name "my*" -type f
[править]Вывод расширенной информации о файле
Предыдущие команды выводили имена файлов, потому что по умолчанию find выполняет команду -print. Опция -ls выводит информацию о файле в формате 'ls -la'.
find . -name "my*" -type f -ls
[править]Выполнение команды
Опция -exec выполняет следующую за ней команду и подставляет вместо {} текущий файл. Найти все каталоги ниже указанного каталога и изменить им права доступа:
find /path -type d -exec chmod 0755 {} \;
[править]Поиск в зависимости от времени создания
Вывести список файлов во всей файловой системе, изменённых в течение последней минуты:
find / -mmin -1 -print
Вывести список файлов во всей файловой системе, которые были изменены более 31 дня назад:
find / -mtime +31 -print
[править]Поиск по размеру файла
Вывести список файлов во всей файловой системе, чей размер 100 Мб и больше:
find / -size +100M -print
[править]Поиск файлов принадлежащих определенному пользователю
find . -user <userid>
[править]Игнорирование ошибок
Если при поиске возникает ошибка (например - нет доступа чтения из каталога) то вывод команды становится менее информативным. Перенаправьте вывод STDERR в /dev/null.
find / -name 'secret.keys' -print 2>/dev/null