Утилита find — это универсальный и функциональный способ поиска в Linux . Эта статья — шпаргалка с описанием и примерами ее использования.
Общий синтаксис
find <where to look> <options>
<where to search> — путь к корневому каталогу, с которого следует начать поиск. Например, find /home/user — поиск в соответствующем каталоге. Для текущего каталога используйте точку «.».
<options> — это набор правил для поиска.
* По умолчанию поиск является рекурсивным. Для поиска в определенном каталоге можно использовать опцию maxdepth .
Описание опций
Опция | Описание |
| -name | Поиск по названию. |
| -inameCase | нечувствительный поиск по названию. |
| -type | Тип объекта поиска. Возможные варианты:
|
| -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 |
| Найдено шоу. | |
| -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