*КУБ– полный комплекс облачных услуг!

Поиск Linux с помощью команды find

Утилита find — это универсальный и функциональный способ поиска в Linux . Эта статья — шпаргалка с описанием и примерами ее использования.

Общий синтаксис

find <where to look> <options>

<where to search> — путь к корневому каталогу, с которого следует начать поиск. Например, find /home/user — поиск в соответствующем каталоге. Для текущего каталога используйте точку «.».

<options> — это набор правил для поиска.

* По умолчанию поиск является рекурсивным. Для поиска в определенном каталоге можно использовать опцию maxdepth .

Описание опций

Опция

Описание

-nameПоиск по названию.
-inameCaseнечувствительный поиск по названию.
-type

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — канал;
  • s — сокет.
-sizeРазмер объекта. Указывается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtimeВремя модификации файла. Указывается в днях.
-mminИзменить время в минутах.
-atimeВремя последнего доступа к объекту в днях.
-aminВремя последнего доступа в минутах.
-ctimeПоследнее изменение владельца или прав на объект за последние дни.
-cminПоследний владелец или изменение прав за последние минуты.
-userПоиск по владельцу.
-groupПо группам.
-permС определенными правами доступа.
-depthПоиск следует начинать не с корневого каталога, а с самого глубоко вложенного каталога.
-maxdepthМаксимальная глубина поиска в каталоге. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию поиск является рекурсивным.
-pruneИсключить перечисленные каталоги.
-mountНе переходите на другие файловые системы.
-regexПо имени с регулярным выражением.
-regextype <type>Тип регулярного выражения.
-L or -followОтображает содержимое символьных ссылок (symlinks).
-emptyПоиск пустых каталогов.
-deleteУдалить найденное.
-lsВывод как ls -dgils
-printНайдено шоу.
-print0Путь к найденным предметам.
-exec <command> {} \;Выполнить команду на найденном.
-okВыдавать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор

Описание

-aЛогическое И. Совместите несколько критериев поиска.
-oЛогическое ИЛИ. Пусть команда поиска выполняет поиск на основе одного из критериев поиска.
-not or !Логическое НЕ. Инвертирует поисковый термин.

Полный набор доступных опций можно получить с помощью команды man find .

Найти примеры использования

Поиск файла по названию

1. Простой поиск по названию:

find / -name «file.txt»

* Этот пример будет искать во всей файловой системе файл с именем file.txt, начиная с корневого каталога / .

2. Поиск файла по части имени:

find / -name «*.tmp»

* эта команда будет искать все папки или файлы в корневом каталоге /, заканчивающиеся на .tmp

3. Несколько условий.

a) Логическое И. Например, файлы, начинающиеся с sess_ и заканчивающиеся на cd :

find. -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, начинающиеся с sess_ или заканчивающиеся на cd :

find. -name «sess_*» -o -name «*cd»

c) Регулярные выражения имеют более компактную форму, например:

find. -regex ‘.*/\(sess_.*cd\)’

find. -regex ‘.*/\(sess_.*\|.*cd\)’

* где в первом поиске используется выражение, подобное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find. ! -name «*.log»

* В этом примере мы использовали логический оператор !.

Поиск по дате

1. Поиск файлов, которые были изменены определенное количество дней назад:

find. -type f -mtime +60

* эта команда найдет файлы, которые были изменены более чем 60 дней назад.

Или между:

find. -mmin -20 -mmin +10 -type f

* найти все файлы, которые были изменены более чем 10 минут назад, но не более чем 20 минут назад .

2. Поиск файлов с более поздними . Эта опция доступна с версии 4.3.3 (ее можно увидеть с помощью команды find —version ).

a) дата изменения:

find. -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые были изменены с 02.11.2019 00:00.

find. -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые были изменены в период с 31.10.2019 по 01.11.2019 (включительно).

б) дата применения:

find. -type f -newerat 2019-10-08

* все файлы, к которым был осуществлен доступ с 10.08.2019.

find. -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым был осуществлен доступ в октябре.

c) дата создания:

find. -type f -newerct 2019-09-07

* все файлы, созданные с 7 сентября 2019 года.

find. -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 09/07/2019 00:00:00 по 09/09/2019 07:50

Тип

Искать в текущем каталоге и всех его подкаталогах только файлы:

find. -type f

* f — поиск только файлов.

Поиск по разрешениям

1. Мы ищем всех, кто умеет читать и писать:

find / -perm 0666

2. Найти файлы, к которым имеет доступ только владелец:

find / -perm 0600

Поиск файлов по содержанию

find / -type f -exec grep -i -H «content» {} \;

* В этом примере выполняется рекурсивный поиск всех файлов в каталоге / и отображается список тех, которые содержат строку content .

Отсортировано по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort-r

* команда найдет все файлы в каталоге /data , добавит дату модификации к имени и отсортирует данные по имени. В результате мы получим, что файлы будут расположены в порядке, в котором они были изменены.

Ограничение количества результатов вывода

Наиболее распространенным примером является вывод одного файла, который был изменен последним. Возьмем пример сортировки и добавим следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort-r | head -n 1

Поиск с действием (exec)

1. Найдите только файлы, начинающиеся с sess_, и удалите их:

find. -name «sess_*» -type f -print -exec rm {} \;

-print не является обязательным, но он покажет все, что будет удалено, поэтому эта опция полезна, когда команда выполняется вручную.

2. Переименуйте найденные файлы:

find. -name «sess_*» -type f -exec mv {} new_name \;

или:

find. -name «sess_*» -type f | xargs -I ‘{}’ mv {} new_name

3. Переместите найденные файлы:

find. -name «sess_*» -type f -exec mv {} /new/path/ \;

* В этом примере мы переместим все найденные файлы в каталог /new/path/ .

4. Отобразить количество найденных файлов и папок, которые заканчиваются на .tmp :

find. -name «*.tmp» | wc -l

5. Изменить разрешения:

find /home/user/* -type d -exec chmod 2700 {} \;

* В этом примере мы ищем все каталоги ( тип d ) в каталоге /home/user и устанавливаем для них права доступа 2700 .

6. Передайте найденные файлы в конвейер (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat {} \; | grep ‘test’

* В этом примере мы использовали find для поиска строки test в файлах, находящихся в каталоге /etc и имеющих расширение .conf . Для этого мы передали список найденных файлов команде grep , которая уже выполнила поиск в содержимом этих файлов.

7. Замена файлов с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» {} \;

* найдите все файлы в каталоге /opt/project и измените их содержимое с test на production .

Плановая очистка

Команда find полезна для автоматического удаления устаревших файлов.

Откройте задачу cron для редактирования:

crontab -e

И добавьте:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm {} \;

* В этом примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задача выполняется ежедневно в 00:00 .

* Мы просматриваем полный путь к исполняемому файлу find с помощью команды which find — он может находиться в разных местах на разных системах UNIX.

VPS Linux

VPS-хостинг с виртуализацией KVM

Удаленный доступ/управление

Готовое решение

Виртуализация KVM

Поддержка 24 часа в сутки