- Поиск в Linux с помощью команды find
- Общий синтаксис
- Описание опций
- Примеры использования find
- Поиск файла по имени
- Поиск по дате
- По типу
- Поиск по правам доступа
- Поиск файла по содержимому
- С сортировкой по дате модификации
- Лимит на количество выводимых результатов
- Поиск с действием (exec)
- Чистка по расписанию
- Как найти файл в Linux
- Утилита find
- Утилита locate
- Поиск текста в файлах
Поиск в Linux с помощью команды find
Обновлено: 01.02.2022 Опубликовано: 25.07.2016
Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.
Общий синтаксис
— путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.». — набор правил, по которым выполнять поиск. * по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.
Описание опций
Также доступны логические операторы:
Оператор | Описание |
---|---|
-a | Логическое И. Объединяем несколько критериев поиска. |
-o | Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска. |
-not или ! | Логическое НЕ. Инвертирует критерий поиска. |
Полный набор актуальных опций можно получить командой man find.
Примеры использования find
Поиск файла по имени
* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.
2. Поиск файла по части имени:
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
find . -name «sess_*» -a -name «*cd»
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
find . -name «sess_*» -o -name «*cd»
в) Более компактный вид имеют регулярные выражения, например:
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
4. Найти все файлы, кроме .log:
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
* данная команда найдет файлы, которые менялись более 60 дней назад.
find . -mmin -20 -mmin +10 -type f
* найти все файлы, которые менялись более 10 минут, но не более 20-и.
2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).
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
* все файлы, к которым обращались с 08.10.2019.
find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01
* все файлы, к которым обращались в октябре.
find . -type f -newerct 2019-09-07
* все файлы, созданные с 07 сентября 2019 года.
find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»
* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50
По типу
Искать в текущей директории и всех ее подпапках только файлы:
* f — искать только файлы.
Поиск по правам доступа
1. Ищем все справами на чтение и запись:
2. Находим файлы, доступ к которым имеет только владелец:
Поиск файла по содержимому
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 /home/user/* -type d -exec chmod 2700 <> \;
* в данном примере мы ищем все каталоги (type 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:
0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;
* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.
Как найти файл в Linux
В создании этой статьи участвовала наша опытная команда редакторов и исследователей, которые проверили ее на точность и полноту.
Команда контент-менеджеров wikiHow тщательно следит за работой редакторов, чтобы гарантировать соответствие каждой статьи нашим высоким стандартам качества.
Количество просмотров этой статьи: 44 159.
Найти файл в системе Linux довольно сложно, если не знать, как это сделать. Лучше всего воспользоваться разными командами, которые вводятся в Терминале. Освоив такие команды, вы получите полный контроль над файлами; также эти команды более функциональны, чем аналогичные поисковики в других операционных системах.
Утилита find
Найдите файл по его имени. Такой простейший поиск выполняется при помощи утилиты find . Приведенная ниже команда будет искать файл в текущем каталоге и во всех его подкаталогах. [1] X Источник информации
- Введите -iname вместо -name , чтобы проигнорировать регистр в веденном имени файла. Команда -name учитывает регистр.
Начните поиск в корневом каталоге. Чтобы запустить поиск по всей системе, к запросу добавьте модификатор / . В этом случае команда find будет искать файл во всех каталогах, начиная с корневого.
- Можно начать поиск в определенном каталоге; для этого замените / на путь к каталогу, например, /home/max .
- Можно использовать . вместо / , чтобы искать файл только в текущем каталоге и его подкаталогах.
Используйте символ обобщения . * , чтобы найти файлы, имя которого соответствует части запроса. При помощи символа обобщения * можно найти файл, полное имя которого неизвестно, или найти все файлы с определенным расширением.
- Эта команда найдет все файлы с расширением .conf в папке пользователя Max (и ее подпапках).
- Воспользуйтесь этой командой, чтобы найти все файл, имена которых соответствуют части запроса. Например, если на компьютере хранится множество файлов, связанных с WikiHow, найдите все файлы, введя «*wiki*» .
Облегчите управление результатами поиска. Если результатов поиска слишком много, среди них сложно найти нужный файл. Используйте символ | , чтобы результаты поиска фильтровались командой less. Это облегчит просмотр и фильтрование результатов поиска.
find /home/max -iname "*.conf" | less
Найдите конкретные элементы. Используйте модификаторы, чтобы в результатах поиска отобразить только определенные элементы. Можно искать обычные файлы ( f ), каталоги ( d ), символьные ссылки ( l ), устройства посимвольного ввода-вывода ( с ) и блочные устройства ( b ).
find / -type f -iname "имя файла"
Отфильтруйте результаты поиска по размеру файлов. Если на компьютере хранится множество файлов с похожими именами, но размер искомого файла известен, отфильтруйте результаты поиска по размеру файлов.
find / -size +50M -iname "имя файла"
- Эта команда найдет все файлы, размер которых превышает 50 МБ. Используйте модификатор + или — , чтобы указать на увеличение или уменьшение размера. Если модификатора + или — нет, команда найдет файлы, размер которых точно совпадает с указанным размером.
- Результаты поиска можно отфильтровать по байтам ( c ), килобайтам ( k ), мегабайтам ( M ), гигабайтам ( G ) или блокам по 512 байт ( b ). Обратите внимание, что приведенные модификаторы учитывают регистр.
Используйте логические операторы (булевы операторы), чтобы объединить поисковые фильтры. Можно использовать операторы -and , -or , -not , чтобы объединить различные поисковые запросы в один запрос. [2] X Источник информации
find /travelphotos -type f -size +200k -not -iname "*2015*"
- Эта команда найдет файлы в папке «Travelphotos», размер которых больше 200 кБ и в именах которых нет числа 2015.
Найдите файлы по владельцу или разрешениям. Если нужно найти файл, принадлежащий конкретному пользователю, или файл с определенными правами доступа, можно сузить поиск.
find / -user max -iname "имя файла" find / -group users -iname "имя файла" find / -perm 777 -iname "имя файла"
- Приведенные выше команды найдут файл определенного пользователя, группы или с конкретными правами доступа. Также в запросе имя файла можно опустить, чтобы найти все файлы, соответствующие указанным критериям. Например, команда find / -perm 777 найдет все файлы с правами доступа 777 (без ограничений). [3] X Источник информации
Объедините команды, чтобы выполнить определенные действия по завершении поиска файлов. Команду find можно объединить с другими командами, которые обработают найденные файлы. Для этого между командой find и второй командой введите -exec , а в конце строки введите <> \;
find . -type f -perm 777 -exec chmod 755 <> \;
- Эта команда найдет в текущем каталоге (и его подкаталогах) все файлы с правами доступа 777, а потом при помощи команды chmod права доступа изменятся на 755.
Утилита locate
- Введите sudo apt-get update и нажмите ↵ Enter .
- В Debian и Ubuntu сделайте следующее: введите sudo apt-get install mlocate и нажмите ↵ Enter . Если locate уже установлена, отобразится сообщение mlocate is already the newest version (Установлена последняя версия).
- В Arch Linux используйте менеджер пакетов pacman: pacman -Syu mlocate
- В Gentoo используйте emerge: emerge mlocate
Используйте . locate , чтобы выполнять простые поисковые запросы. Утилита locate работает быстро, но она не так функциональна, как утилита find . Команда locate обрабатывает простые поисковые запросы аналогично команде find .
- Эта команда найдет (во всей системе) все файлы с расширением .jpg . Здесь символ обобщения * работает так же, как у команды find .
- Как и у команды find , модификатор -i игнорирует регистр поискового запроса.
Ограничьте количество результатов поиска. Если результатов поиска слишком много, сократите их при помощи модификатора -n и числа, которое определяет количество отображаемых результатов поиска.
- Эта команда приведет к отображению первых 20 результатов, которые соответствуют поисковому запросу.
- Также можно использовать символ | , чтобы результаты поиска фильтровались командой less. Это облегчит просмотр результатов поиска.
Поиск текста в файлах
Используйте команду . grep , чтобы искать текст в файлах. Сделайте это, чтобы найти файл, который содержит определенную фразу или строку. Основной формат команды grep выглядит следующим образом:
grep -r -i "поисковый запрос" /путь/к/каталогу/
- Модификатор -r делает поиск рекурсивным, поэтому в текущем каталоге (и всех подкаталогах) будет найден любой файл, содержащий строку из поискового запроса.
- Модификатор -i указывает на то, что запрос не учитывает регистр. Чтобы учесть регистр, не вводите модификатор -i .
Скройте лишний текст. При выполнении команды grep (как описано выше) на экране отобразится имя файла и текст с выделенной фразой или строкой, указанной в поисковом запросе. Такой текст можно скрыть, чтобы отобразить только имя файла и путь к нему. Для этого введите следующую команду:
grep -r -i "поисковый запрос" /путь/к/каталогу/ | cut -d: -f1
Скройте сообщения об ошибках. Команда grep выводит сообщение об ошибке, если пытается получить доступ к папкам без надлежащих разрешений или попадает в пустые папки. Такие сообщения можно отправить в /dev/null, чтобы они не отображались на экране. [5] X Источник информации
grep -r -i "поисковый запрос" /путь/к/каталогу/ 2>/dev/null