Команда «linux find»
Содержание:
Как найти все файлы только для чтения
Как уже было сказано, команда find более многофункциональна, чем locate. Она может выполнять поиск по операционной системе и жесткий дискам, руководствуюсь в качестве параметров и фильтров разрешениями, выданными конкретному пользователю (его учетной записи). Для этого используются специальные маски прав в восьмеричной и других системах исчисления. К примеру, для нахождения данных с маской прав 0664, необходимо выполнить команду «$find . type f -perm 0664» без кавычек (они добавлены для удобства отображения команд).
Для поиска файлов с установленными флагами suid/guid выполняют такую строку «$find / -perm 2644». А вот поиск файлов, которые доступны только для чтения, выглядит следующим образом: «$ find /etc -maxdepth 1 -perm /u=r».
Важно! Исполняемые файлы имеют такие же разрешения и по ним удобно проводить поиск. Пользуясь масками команды find, а не поиском по расширению
Для нахождения только исполняемых файлов прописывают и выполняют «$find /bin -maxdepth 2 -perm /a=x».
Примеры использования
С теорией покончено, теперь перейдем к практике. Рассмотрим несколько основных примеров поиска внутри файлов Linux с помощью grep, которые могут вам понадобиться в повседневной жизни.
Поиск текста в файлах
В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:
User:x:1000:1000:User,,,:/home/User:/bin/bash
А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:
$ grep -A4 «EE» /var/log/xorg.0.log
Выведет строку с вхождением и 4 строчки после нее.
$ grep -C2 «EE» /var/log/xorg.0.log
Выведет по две строки с верху и снизу от вхождения.
Разница между locate и find Линукс
Многие новички часто спрашивают, почему в операционной системе Линукс есть две одинаковые команды: locate и find, ведь выполняют они одни и те же действия. Зачем использовать одну, если есть другая, и наоборот.
На самом деле, различия есть, и они весьма существенные. Цель команд одна – найти файл по заданным характеристикам или имени, а вот работают они по-разному. В случае с find поиск выполняется в реально существующей системе. Он более медленный, но его результаты всегда актуальны. К тому же, у find больше опций.
Команда locate делает все то же самое, но использует для поиска базу данных, которая была создана ранее (командой updatebd). Процедура нахождения файла или папки выполняется быстрее, но системе приходится пользоваться «старой» базой данных и искать имена или их части.

Для поиска по имени в Linux используют find name
Найти файлы по дате изменения
Команда также может искать файлы на основе их последнего изменения, доступа или времени изменения.
То же, что и при поиске по размеру, используйте символы плюс и минус для «больше чем» или «меньше чем».
Допустим, несколько дней назад вы изменили один из файлов конфигурации dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в который заканчивается на и был изменен за последние пять дней:
Вот еще один пример фильтрации файлов по дате модификации с использованием опции . Приведенная ниже команда перечислит все файлы в каталоге которые были изменены или более дней назад:
Метод 2: Использование команды Locate
Существует другая команда Locate, которую можно использовать для поиска файлов в Linux. В нем не так много условий поиска, как в утилите Find, но это намного лучше и быстрее, чем утилита Find. Причиной этого является фоновый процесс, который фактически выполняется в вашей системе и ищет и сохраняет новые файлы в своей собственной базе данных. В отличие от команды «Найти», она не выполняет поиск файлов и каталогов на локальном жестком диске, а ищет их в своей базе данных. Для работы поисковой утилиты ее база данных должна регулярно обновляться.
Установка Locate
Locate не устанавливается по умолчанию в ОС Linux. Вам нужно будет установить его вручную. Нажмите Ctrl + Alt + T , чтобы запустить Терминал, а затем введите следующую команду как sudo для установки утилиты Locate:
$ sudo apt-get install locate

После завершения установки вы можете использовать Найдите утилиту прямо сейчас.
Общий синтаксис команды:
$ locate –i filename
Где -i используется для игнорирования различий в регистре.
Поиск файла
Например, для поиска для имени файла «centos» используйте следующую команду в Терминале:
$ locate –i centos

Он будет искать все файлы, которые содержат строку «centos» в своих именах файлов.
Найти Несколько файлов
Вы также можете искать несколько имен файлов одновременно. Например, используйте следующую команду в Терминале для поиска двух файлов « sdn.txt» и « centos» :
$ locate –i sdn.txt centos

Поиск с использованием Wildcard
Вы также можете использовать подстановочный знак, чтобы найти файлы, соответствующие запросу. Например, для поиска всех файлов, оканчивающихся на «.iso», используйте следующую команду в Терминале:
$ locate –i *.iso

Обновление locate database
Команда Locate использует свою базу данных для работы , поэтому его нужно регулярно обновлять.Запустите следующую команду в Терминале, чтобы обновить базу данных служебной программы Locate:
$ sudo updatedb

find + sed
К результатам команды find можно сразу же применить
sed
find . -type f -name ‘*.php‘ -exec sed -i ‘s@python/old_file_name\.php@python/new_directory/new_name\.php@‘ {} \;
. означает, что ищем в текущей директории (и вложенных)
Эта команда заменяет везде
на
Следующий пример
find . -type f -name ‘*.php‘ -exec sed -n ‘/\/i\/aws\/oauth.php/ p‘ {} \;
Эта команда ищет по всем .php файлам строку /i/aws/oauth.php
Если нужно не найти или заменить строку а показать название файла, в котором есть определённые символы
— удобно воспользоваться связкой find + grep
Добавить в функцию my_function дополнительный аргумент — сразу в всех .php файлах.
find -type f -name «*.php« -exec sed ‘smy_function(\$old_arg1,\ \$old_arg2)my_function(\$old_arg1,\ \$old_arg2,\ \$new_arg1‘ {} \;
find -type f -name «*.php« -exec sed ‘smy\_function(\$old\_arg1,\ \$old\_arg2)my\_function(\$old\_arg1,\ \$old\_arg2,\ \$new\_arg1‘ {} \;
Linux поиск по содержимому файлов командой locate
Поиск, производимый командой locate весьма быстр. Однако учитывайте тот факт, что системная база данных может быть не живой на момент осуществления операции. Механизм сканирования файловой системы, время его проведения и вобщем наличие такого инструмента может разниться в различных дистрибутивах Linux. Команда locate может быть полезна лишь при поиске файла по его имени. Однако для проверки текстового содержимого документов на вступление искомых данных нужно использовать другой инструмент.
Данная команда, как правило, работает быстрее и может с легкостью производить поиск (в широком смысле — стремление добиться чего-либо, найти что-либо; действия субъекта, направленные на получение нового или утерянного (забытого): новой информации (поиск информации), данных,) по всей файловой системы. Linux имеет специальную команду grep, какая принимает шаблон для поиска и имя файла (именованная область данных на носителе информации). В случае нахождения совпадений, они будут выведены в терминал. В всеобщем виде выражение можно составить как «grep шаблон_поиска имя_файла». Чтобы отыскать файлы с помощью команды locate, просто используйте следующий синтаксис:
К образцу, чтобы возвращать только файлы, содержащие сам запрос, вместо того чтобы вводить каждый файл, который содержит запрос в ведущих к нему каталогах, можно утилизировать флаг –b (чтоб искать только basename, базовое имя файла):
Команды find и locate – отличные инструменты для поиска файлов в UNIX‐подобных операционных системах. Любая из этих утилит имеет свои преимущества. Мы рассмотрели использование команд для поиска и фильтрации вывода бригад в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках. Несмотря на то, что команды find и locate сами по себе очень мощны, их действие возможно расширить, комбинируя их с другими командами. Научившись работать с find и locate, попробуйте чистить их результаты при помощи команд wc, sort и grep.
Опции
Давайте рассмотрим самые основные опции утилиты, которые помогут более эффективно выполнять поиск текста в файлах grep:
- -b — показывать номер блока перед строкой;
- -c — подсчитать количество вхождений шаблона;
- -h — не выводить имя файла в результатах поиска внутри файлов Linux;
- -i — не учитывать регистр;
- — l — отобразить только имена файлов, в которых найден шаблон;
- -n — показывать номер строки в файле;
- -s — не показывать сообщения об ошибках;
- -v — инвертировать поиск, выдавать все строки кроме тех что содержат шаблон;
- -w — искать шаблон, как слово, окруженное пробелами;
- -e — использовать регулярные выражения при поиске;
- -An — показать вхождение и n строк до него;
- -Bn — показать вхождение и n строк после него;
- -Cn — показать n строк до и после вхождения;
Все самые основные опции рассмотрели, и даже больше, теперь перейдем к примерам работы команды grep linux.
Поиск по типу
Что, если вы не заинтересованы в поиске файла по имени, а скорее будете предпочитать находить все файлы определенного типа и форматов? Некоторые из наиболее распространенных файловых дескрипторов:
- F — обычный файл
- D — каталог
- L — символическая ссылка
- C — символьные устройства
- B — блочные устройства
Теперь предположим, что вы хотите найти все блокирующие устройства (файл, который ссылается на устройство) в вашей системе. С помощью опции -type мы можем сделать это следующим образом:
Вышеприведенная команда привела бы к довольно большому количеству результатов (большая часть из которых указывала на запрещенное разрешение), но включала бы вывод, подобный этому:
Вуаля! Блокировать устройства.
Мы можем использовать тот же параметр, который может помочь нам найти файлы конфигурации. Например, вы хотите найти все «обычные» файлы, которые заканчиваются расширением conf. Тогда эта команда будет выглядеть примерно так:
Вышеупомянутая команда просматривала всю структуру каталогов, чтобы найти все обычные файлы, заканчивающиеся на .conf. Если вы знаете, что большинство ваших файлов конфигурации размещены в / etc, вы можете указать, это вот так:
Вышеупомянутая команда отобразит все ваши .conf-файлы из / etc (Рисунок 1).

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
С теорией покончено, теперь перейдем к практике. Рассмотрим несколько основных примеров поиска внутри файлов Linux с помощью grep, которые могут вам понадобиться в повседневной жизни.
ПОИСК ТЕКСТА В ФАЙЛАХ
В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:
В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:
А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:
ВЫВЕСТИ НЕСКОЛЬКО СТРОК
Например, мы хотим выбрать все ошибки из лог файла, но знаем что в следующей сточке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк, ошибки будем искать в Xorg.log по шаблону «EE»:
Выведет строку с вхождением и 4 строчки после нее.
Выведет целевую строку и 4 строчки до нее
Выведет по две строки с верху и снизу от вхождения.
РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ В GREP
Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах grep. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:
Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:
Поиск в конце строки, спецсимвол «$»:
Найдем все строки которые содержат цифры:
Вообще, регулярные выражения grep это очень обширная тема, в этой статье я лишь показал несколько примеров, чтобы дать вам понять что это. Как вы увидели, таким образом, поиск текста в файлах grep становиться еще гибче. Но на полное объяснение этой темы нужна целая статья, поэтому пока пропустим их и пойдем дальше.
РЕКУРСИВНОЕ ИСПОЛЬЗОВАНИЕ GREP
Если вам нужно провести поиск текста grep в нескольких файлах, размещенных в одном каталоге или подкаталогах, например, в файлах конфигурации Apache — /etc/apache2/ — используйте рекурсивный поиск. Для включения рекурсивного поиска в grep есть опция -r. Следующая команда займется поиском текста в файлах Linux во всех подкаталогах /etc/apache2 на предмет вхождения строки mydomain.com:
В выводе вы получите:
Здесь перед найденной строкой указано имя файла в котором она была найдена. Вывод имени файла легко отключить с помощью опции -h:
ПОИСК СЛОВ В GREP
Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить grep искать по содержимому файлов в linux только те строки, которые выключают искомые слова с помощью опции -w:
ПОИСК ДВУХ СЛОВ
Можно искать по содержимому файла не одно слово, а целых несколько. Чтобы искать два разных слова используйте команду egrep:
КОЛИЧЕСТВО ВХОЖДЕНИЙ СТРОКИ
Утилита Grep может сообщить сколько раз определенная строка была найдена в каждом файле. Для этого используется опция -c (счетчик):
C помощью опции -n можно выводить номер строки в которой найдено вхождение, например:
Получим:
ИНВЕРТИРОВАННЫЙ ПОИСК В GREP
Команда grep linux может быть использована для поиска строк в файле Linux которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:
ВЫВОД ИМЕНИ ФАЙЛА
Вы можете указать grep выводить только имя файла в котом было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:
Примеры использования команды locate.
Давайте найдем все файлы с расширением .exe:

Если мы хотим вывести результаты поиска в одну строку, тогда используем следующую опцию -0 (это тире и ноль)
Вот результат:

Но если мы ищем файл с названием «file», то не найдутся файлы с именами в другом регистре: File, FILE и т.д.
Чтобы поиск сделать регистронезависимым, то нужно использовать следующую опцию -i, то есть:
Если мы хотим узнать просто количество файлов, имеющих в имени «file», или количество файлов с определенным расширением, к примеру .exe, то нужно указать опцию -c:

Что означает, что в системе 10 файлов имеют расширение .exe.
Если мы хотим ограничить число выводимых файлов в поиске по заданному параметру, мы ставим опцию -n и число:
То есть, данная команда с опцией -n 2 выведет нам только 2 первых найденных файла:

И напоследок, locate лучше выполнять с опцией -e, тогда будут отображены файлы, которые существуют в системе. Даже тогда, когда запись о файле находится в базе данных, все равно будет осуществлена проверка физического нахождения файла в системе:
Полезные команды whereis и which.
У нас установлены программы в системе и чтобы узнать размещение бинарных файлов, исходных кодов и руководств, относящихся к установленной программе, можно выполнить команду whereis. Для примера найдем информацию о пакете google-chrome:
Команда же which отображает полный путь к установленной программе. Также в качестве примера возьмем google-chrome:
Результат выполнения данных команд:

Поиск файла в Linux по имени командой locate
Команда (Команда — группа лиц, объединённая общими мотивами, интересами) “locate” это альтернатива команде “find -name”. Команда find выискивает файлы в выбранной части файловой системы и процесс может быть не очень скорым. С другой стороны, команда locate ищет файлы в базе данный, созданной умышленно для этих целей /var/lib/locatedb, что происходит намного быстрее. Для обновления базы используется бригада updatedb. С помощью этой команды вы можете увидеть все файлы или каталоги, названия каких содержат искомый образец. Например, для поиска файла, содержащего в названии слово dog, заведите в командной строке:
Команда locate использует базу данных для определения местопребывания файлов или каталогов, содержащих в названии слово dog. Результаты поиска могут включать файл с именем dog, файл с названием bulldog.txt, каталог с названием /dogs/ и так далее. Чтобы узнать более о команде locate, обратитесь к ее man-странице (введите в командной строке man locate). При условии, что основа данных обновлена, команда locate осуществляет поиск очень быстро. Обновление основы данных команды locate происходит каждую ночь при помощи службы cron. cron — это маленькая программа, которая запускается в фоновом режиме и выполняет различные задачи (такие как обновление основы данных команды locate) через определенные промежутки времени.
Using Common find Commands and Syntax to Find a File in Linux
expressions take the following form:
- The attribute will control the process’s behavior and optimization method.
- The attribute will define the top-level directory where begins filtering.
- The attribute controls the tests that search the directory hierarchy to produce output.
Consider the following example command:
This command enables the maximum optimization level (-O3) and allows to follow symbolic links (). searches the entire directory tree beneath for files that end with .
Basic Examples
| Command | Description |
|---|---|
| Find a file called testfile.txt in current and sub-directories. | |
| Find all files in the and sub-directories. | |
| Find an empty file within the current directory. | |
| Find all files (ignoring text case) modified in the last 7 days by a user named exampleuser. |
Найти и удалить файлы
Чтобы удалить все совпадающие файлы, добавьте параметр в конец выражения соответствия.
Убедитесь, что вы используете эту опцию, только если уверены, что результат соответствует файлам, которые вы хотите удалить. Перед использованием опции всегда рекомендуется распечатать совпадающие файлы.
Например, чтобы удалить все файлы, заканчивающиеся на из , вы должны использовать:
Используйте параметр с особой осторожностью. Команда оценивается как выражение, и если вы сначала добавите опцию , команда удалит все, что находится ниже указанных вами начальных точек.. Когда дело доходит до каталогов, может удалять только пустые каталоги, как и
Когда дело доходит до каталогов, может удалять только пустые каталоги, как и .
ОСНОВНЫЕ ПАРАМЕТРЫ КОМАНДЫ FIND
Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.
-P никогда не открывать символические ссылки
-L — получает информацию о файлах по символическим ссылкам
Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
-maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
-depth — искать сначала в текущем каталоге, а потом в подкаталогах
-mount искать файлы только в этой файловой системе.
-version — показать версию утилиты find
-print — выводить полные имена файлов
-type f — искать только файлы
-type d — поиск папки в Linux
Поиск файла в Linux по фамилии командой whereis
Whereis возвращает место расположения кода (опция -b), ман-страниц (функция -m), и исходные файлы (опция -s) для указанной команды. Если опции не указываются, выводится вся вразумительная информация. Эта команда быстрее чем “find” но менее полная. Команда whereis имеет последующий формат:
покажет положение бинарного файла, исходников и man-страницы бригады find:
Вот и подошла к концу эта маленькая статья, в которой была рассмотрена команда find. Как видите, это одна из наиболее значительных команд терминала Linux, позволяющая очень легко получить список нужных файлов. Ее желанно знать всем системным администраторам.
Поиск через графический интерфейс
Главное меню
С помощью главного меню ОС вы можете не только искать и запускать программы, но также и выполнять поиск файлов. Подобный функционал присутствует во многих окружениях рабочего стола (, , и пр.). Например, в KDE это представлено следующим образом:

При этом стоит отметить, что такой вариант поиска ориентирован больше на поиск программ, нежели на поиск файлов, поэтому выполняется он только в домашнем каталоге и не уходит вглубь файловой системы.
Файловые менеджеры
Многие файловые менеджеры также предоставляют возможности поиска файлов. Например, в Dolphin для запуска поиска достаточно просто нажать кнопку со значком лупы, а затем ввести имя файла (или папки) в строку поиска. При этом вы можете выбрать папку, в которой будет выполняться поиск, а также указать дополнительные параметры (поиск по содержимому и пр.). Помимо этого в качестве поискового запроса допускается применять символы и :

Поиск по содержимому в Dolphin:

KFind
В KDE, помимо вышеупомянутых инструментов поиска, также есть замечательная утилита под названием KFind. С её помощью вы можете точно настроить параметры поиска (указать имя файла, его тип и путь поиска, обычный текстовый поиск или мета-поиск, дату изменения, размер, пользователя, группу и пр.). Она также позволяет сохранять результаты поиска в виде простого текстового списка URL-адресов найденных файлов:

SearchMonkey
SearchMonkey позволяет выполнять поиск файла, как по имени, так и по его содержимому, по диапазону дат и пр. Но главное преимущество SearchMonkey — это возможность везде применять регулярные выражения.

Поиск с применением регулярного выражения в SearchMonkey:

Recoll
Recoll — это приложение (поисковый движок) для полнотекстового поиска, выполняющее поиск ваших данных по содержимому, а не по внешним атрибутам (например, по имени файла). Вам не нужно запоминать, в каком файле или сообщении электронной почты вы хранили ту или иную информацию. Необходимо лишь указать слова (или выражения), которые должны или не должны присутствовать в искомом тексте, и взамен вы получите список соответствующих документов, упорядоченных таким образом, что первыми идут наиболее релевантные из них (подобно поисковым системам Интернета).
Установить программу можно из официальных репозиториев через командную строку:
Или через графический интерфейс:

Сразу же после запуска утилита предложит вам создать индекс документов, которые присутствуют в вашем домашнем каталоге. После создания индекса вы сможете выполнять по нему поиск. Для этого достаточно ввести какой-нибудь запрос, например, , и вы увидите все файлы, которые содержат это слово с примерами вхождений, отсортированные по релевантности:

Это может быть очень удобно при работе с большим объемом текстовых данных. Программа поддерживает такие форматы файлов, как: .pdf, .djvu, .doc, .docx, .odf. А также умеет находить перечисленные файлы в архивах.
Синтаксис grep и find
Начнём с оператора find. Синтаксис файловой поисковой команды выглядит так:
Некоторые употребительные параметры:
- -depth : поиск в текущей папке и подкаталогах;
- -version : вывести версию команды;
- -print : показывать полные имена файлов (в Linux они могут быть сколь угодно большими);
- -type f : поиск исключительно файлов;
- -type d – поиск только директорий (папок).

Перечень доступных опций (указываются через дефис):
- name : файловый поиск по имени;
- user : поиск по имени владельца файла;
- perm : по атрибуту «режим доступа»;
- mtime : по времени последнего изменения (редактирования) файла;
- group : по группе;
- atime : по дате последнего открытия файла;
- newer : поиск файла с датой, более новой, чем заданная в шаблоне директивы;
- size : по размеру файла в байтах;
- nouser : поиск файлов, не имеющих введённого атрибута «владелец».
Синтаксис grep:
Под опциями следует понимать дополнительные уточняющие параметры, например, использование инверсного режима или поиск заданного количество строк.

В шаблоне указывается, что нужно искать, используя непосредственно заданную строку или регулярное выражение.
Возможность использования регулярных выражений позволяет существенно расширить возможности поиска. Указание стандартного вывода может оказаться полезным, если стоит задача отфильтровать ошибки, записанные в логи, или для поиска PID процесса в результатах выполнения команды ps, которые могут быть многостраничными.
Рассмотрим наиболее употребительные параметры grep:
- -b : выводить номер блока перед выдачей результирующей строки;
- -c : необходимо подсчитать число вхождений искомого фрагмента;
- -i : поиск без учёта регистра;
- -n : выдавать на стандартное устройство вывода номер строки, в которой найден искомый фрагмент или шаблон;
- – l : в результате выдачи должны присутствовать только имена файлов с найденным поисковым фрагментом;
- -s : игнорировать вывод ошибок;
- -w : поиск фрагмента, опоясанного с двух сторон пробелами;
- -v : инвертированный поиск, то есть отображение всех строк, не содержащих заданный фрагмент;
- -e : параметр указывает, что далее следует регулярное выражение, имеющее собственный синтаксис;
- -An : вывод искомого фрагмента и предыдущих n строк;
- -Bn : то же, но со строками, идущими после шаблона.
Теперь имеет смысл перейти от теоретической части к практической.3
Исключить директорию из поиска
Из предыдущего параграфа понятно, что с помощью
можно исключить директорию из поиска.
Пример: найти в ./code все файлы, заканчивающиеся на index.php
но проигнорировать поддиректории на p, то есть в директориях python и php не искать.
find ./code -path «./code/p*» -prune -false -o -name «*index.php»
./code/js/errors/index.php
./code/js/index.php
./code/c/index.php
./code/cpp/index.php
./code/go/pointers/index.php
./code/go/declare_variable/index.php
./code/go/constants/index.php
./code/go/index.php
./code/java/index.php
./code/dotnet/index.php
./code/ruby/index.php
./code/theory/index.php
./code/index.php
-false нужен чтобы не выводить проигнорированные директории.
Ещё один способ исключить директорию из поиска
find ./code -name «*.php« -not -path «./code/p*»
Как найти файлы в Linux
Команда find имеет множество опций и функций, которые фильтруют файлы в соответствии с указанными условиями.
Найти синтаксис команды
Базовый синтаксис команды find:
Например, следующая команда будет искать текстовые файлы в каталоге / home .
Имейте в виду, что перед поиском файлов в вашем хранилище вам необходимо иметь права на чтение для этого конкретного каталога.
Искать файлы по имени
Чаще всего команда find используется для поиска файла по его имени. Чтобы найти файл по имени файла, используйте флаг -name с командой по умолчанию.
Вышеупомянутая команда будет искать файл с именем filename.txt в каталоге / home . Параметр -type f сообщает системе, что мы ищем файл .
Если вы хотите игнорировать регистр символов в имени файла, замените параметр -name на -iname .
Эта команда найдет файл, который имеет одно из следующих имен: имя файла, имя файла, имя файла, имя файла и т. Д.
Как и любую другую команду Linux, вы можете использовать . (точка), чтобы указать относительный путь к текущему каталогу.
Точно так же можно использовать для / root и ~ для / home .
Найти файлы по расширению
Поиск файлов с определенным расширением может помочь сузить результаты поиска. Чтобы найти файл по его расширению, используйте следующее регулярное выражение с флагами -name и -iname .
Эта команда отобразит список всех файлов с расширением .pdf
Обратите внимание, что вам нужно будет экранировать символ звездочки ( * ) кавычками ( «» ) или обратной косой чертой ( ), чтобы терминал интерпретировал его как подстановочный знак
Вы также можете инвертировать указанную выше команду, используя флаг -not . Следующая команда будет искать файлы без расширения .pdf .
Вы даже можете передать команду find по конвейеру с другими командами Linux. Например, чтобы изменить права модерации для каждого файла, который соответствует условию:
Эта команда выполнит поиск всех файлов PDF в каталоге / home и изменит их права доступа, чтобы любой мог читать, писать и выполнять эти файлы.
Поиск определенных типов файлов
Помимо файлов, команда find может искать и другие типы файлов. Каталоги, символические ссылки, сокеты и символьные устройства – вот некоторые из типов файлов, которые поддерживает find.
До сих пор мы использовали параметр -type f в команде find. Буква f означает файл . Для поиска файлов других типов в Linux замените f другими зарезервированными символами.
- f : обычные файлы
- d : каталоги
- l : символические ссылки
- c : символьные устройства
- b : блочные устройства
- p : именованный канал
- s : сокеты
Чтобы найти подкаталоги в каталоге / home :
Найти файлы по размеру
Флаг -size позволяет вам искать файлы, которые занимают определенное место на диске. Следующие суффиксы обозначают различные размеры файлов:
- b : блоки по 512 байт
- c : байты
- w : двухбайтовые слова
- k : килобайты
- M : мегабайты
- G : гигабайты
Чтобы найти все файлы размером 1 ГБ:
Для поиска файлов размером менее 1 ГБ добавьте символ минус ( – ) перед указанием размера:
Точно так же используйте оператор плюс ( + ), чтобы найти файлы размером более 1 ГБ:
Для поиска файлов в диапазоне размеров:
Найти файлы с помощью отметок времени
Возможно, вы уже знаете, что Linux назначает определенные временные метки каждому файлу в вашем хранилище. Эти отметки времени содержат время модификации, время изменения и время доступа.
Чтобы найти файлы с определенным временем модификации:
Вышеупомянутая команда распечатает все файлы, которые были изменены за последние пять дней. Точно так же вы можете использовать -atime и -ctime для фильтрации файлов по времени доступа и времени изменения.
Вы также можете использовать знаки плюс и минус, чтобы найти файлы, размер которых больше или меньше определенной отметки времени.
Поиск файлов с определенными разрешениями
Параметр -perm позволяет пользователям искать файлы с определенным набором разрешений.
Используйте символ косой черты ( ) для перечисления файла, если хотя бы одна категория имеет правильный набор предоставленных разрешений.
Найти и удалить файлы
Чтобы удалить все отфильтрованные файлы с помощью команды find, добавьте в конец команды флаг -delete .
Вышеупомянутая команда удалит все файлы PDF, которые находятся в каталоге / home .
Вы не сможете удалить непустые каталоги с помощью find. Вам нужно будет использовать команду rm для удаления таких папок в вашей системе Linux.
Найти файлы по расширению
Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, заканчивающиеся на внутри , вы должны ввести:
Важно отметить, что вы должны либо заключить шаблон в кавычки, либо экранировать символ звездочки обратной косой чертой чтобы он не интерпретировался оболочкой при использовании подстановочного знака. Чтобы найти все файлы , которые не соответствуют регулярному выражению вы можете использовать вариант
Например, чтобы найти все файлы, которые не заканчиваются на вы должны использовать:
Чтобы найти все файлы , которые не соответствуют регулярному выражению вы можете использовать вариант. Например, чтобы найти все файлы, которые не заканчиваются на вы должны использовать:
Поиск файлов через терминал. Команда locate
Команда locate считается устаревшей, т.к. она выполняет поиск не в реальном времени, подобно команде , а только по ранее созданной базе файлов. Вы вводите слово, которое вас интересует, и команда выдает все известные ей файлы, имя которых содержит заданное слово. Команда поддерживает работу с регулярными выражениями. Например, чтобы найти все файлы, в имени которых содержится слово users, необходимо выполнить:
Стоит заметить, что если файл появился в системе уже после создания базы, то он не будет найден.
Иногда вам может потребоваться обновить базу данных, к которой обращается . Для этого необходимо ввести команду (её запуск производится от имени суперпользователя):
Метод 3: Использование команды Grep
Хотя Grep не предназначен для прямого поиска файлов в вашей системе, он используется для поиска текста. Однако вы можете использовать его для отображения имен файлов, которые содержат определенную строку символов, соответствующую вашему поисковому запросу. Чтобы найти строку, вы должны заключить ее в двойные кавычки.
Общий синтаксис команды:
$ grep [/ path / to / file] где содержит общие параметры для управления поиском, а содержит строку, которую мы хотим искать.
Если вы ищете файл, содержащий слово, которое, как вы подозреваете, может быть в любом конкретном каталоге вы можете найти его, используя приведенный выше синтаксис команды в Терминале.
Например, чтобы найти файл, содержащий слово «tintin», и мы думаем, что этот файл может быть в наших Загрузках folder, мы можем использовать следующую команду для поиска этого файла.
$ grep -r –i “tintin” /home/tin/Downloads

Где
— i используется для игнорирования различий в регистре
— r используется для поиска для указанного каталога рекурсивно
Поиск нескольких слов
Вы также можете искать несколько строк одновременно. Вы должны использовать обратную косую черту «\» и символы канала «|» среди ваших строк.
Например, для поиска двух строк «tintin» и «ping», мы можем использовать следующую команду в терминале:
$ grep –r –I “tintin\|ping” /home/tin/Downloads

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