Утилита find для поиска файлов
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 — используется, когда вы хотите исключить из поиска определённые каталоги.
Найти все файлы, название которых начинается на fi.
find . -name 'fi*'
Поиск в определенном каталоге
Найти все файлы, начиная с корневой директории, название которых начинается на fi.
find / -name 'fi*'
Поиск в директориях /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
Еще команды
find / -name file1 найти файлы и директории с именем file1. Поиск начать с корня (/)
find / -user user1 найти файл и директорию принадлежащие пользователю user1. Поиск начать с корня (/)
find /home/user1 -name «*.bin» найти все файлы и директории, имена которых оканчиваются на ‘. bin’.
find /usr/bin -type f -atime +100 найти все файлы в ‘/usr/bin’ время обращения к которым более 100 дней.
find /usr/bin -type f -mtime -10 найти все файлы в ‘/usr/bin’ изменённые в течении последних 10 дней.
find / -name *.rpm -exec chmod 755 ‘{}’ \; найти все фалы и директории ‘.rpm’, и изменить права доступа.
Может производить поиск в одной или нескольких директориях с использованием критериев, заданных пользователем. По умолчанию, 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 — используется, когда вы хотите исключить из поиска определённые каталоги.
Найти все файлы, название которых начинается на fi.
find . -name 'fi*'
Поиск в определенном каталоге
Найти все файлы, начиная с корневой директории, название которых начинается на fi.
find / -name 'fi*'
Поиск в директориях /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
Еще команды
find / -name file1 найти файлы и директории с именем file1. Поиск начать с корня (/)
find / -user user1 найти файл и директорию принадлежащие пользователю user1. Поиск начать с корня (/)
find /home/user1 -name «*.bin» найти все файлы и директории, имена которых оканчиваются на ‘. bin’.
find /usr/bin -type f -atime +100 найти все файлы в ‘/usr/bin’ время обращения к которым более 100 дней.
find /usr/bin -type f -mtime -10 найти все файлы в ‘/usr/bin’ изменённые в течении последних 10 дней.
find / -name *.rpm -exec chmod 755 ‘{}’ \; найти все фалы и директории ‘.rpm’, и изменить права доступа.
Комментарии
Отправить комментарий