Поиск содержимого файла Linux

Обновлено: 21.11.2024

Почти все файловые менеджеры для Linux, такие как Nemo и Thunar, по умолчанию предоставляют возможность поиска файлов. Но если вы хотите найти строку внутри содержимого файла с помощью файлового менеджера, большинство из них не позволяют вам это сделать.

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

На этой странице

Поиск определенного текста в Linux с помощью инструмента Catfish GUI

Я начну с самого простого способа, который подойдет всем, в том числе новичкам, и продвинутым пользователям Linux. Catfish — это простой и легкий инструмент поиска файлов с графическим интерфейсом для настольных компьютеров Linux. Наряду с поиском файлов в вашей системе вы также можете использовать его для поиска всех файлов, содержащих определенное слово.

Установка инструмента поиска Catfish в Linux

Пакет Catfish уже доступен в основных репозиториях Debian и Ubuntu. Следовательно, если вы используете дистрибутивы на основе Debian или Ubuntu, вы можете просто установить его, выполнив команду:

В других дистрибутивах Linux вы можете установить его из репозиториев по умолчанию с помощью диспетчера пакетов.

Если пакет недоступен, вы можете загрузить файл последней версии, извлечь загруженный файл tar.bz2 и выполнить следующую команду:

Поиск содержимого файла с помощью Catfish

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

Поиск определенного текста в Linux с помощью Catfish Tool

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

Поиск текста по типам файлов

Поиск определенного текста в Linux с помощью команды Grep

Помимо графического интерфейса, grep — один из популярных инструментов командной строки, который можно использовать для поиска внутри файлов. Поскольку почти все unix-подобные операционные системы поставляются с утилитой grep по умолчанию, вам не нужно ее устанавливать.

Поиск определенного текста в файлах

Теперь, чтобы найти все файлы для данной текстовой строки в терминале Linux, вы можете запустить следующую команду. Здесь флаг '-r' или '-R' рекурсивно просматривает все подкаталоги внутри указанного каталога.

Поиск определенного текста в файлах

Найти имена файлов, содержащие заданную строку

Если вы хотите напечатать только имена файлов и скрыть текст из вывода, вы можете использовать флаг '-l'.

Имена файлов списка содержат определенный текст в Linux

Печать имен файлов и номеров строк, содержащих заданную строку

Кроме того, вы также можете настроить вывод, используя следующие параметры, доступные для grep:

Также стоит упомянуть, что если вы выполняете поиск в каталогах, для которых требуются права суперпользователя, вам необходимо использовать команду sudo.

Поиск определенного текста в определенных типах файлов

Чтобы еще больше сократить область поиска, вы также можете специально указать тип файлов и каталогов, которые нужно искать только во время поиска. «--include», «--exclude» и «--exclude-dir» — это параметры, доступные для добавления типа файла и фильтра каталога.

Поиск определенного текста в определенных типах файлов

Поиск определенного текста в Linux с помощью MC (Midnight Commander)

Если вы живете в терминале и по-прежнему хотите искать текст с помощью графического интерфейса, вы также можете попробовать файловый менеджер на основе пользовательского интерфейса терминала (TUI). для файлов.

Полуночный командир

Установите Midnight Commander в Linux

Midnight Commander доступен для установки из репозиториев по умолчанию в большинстве дистрибутивов Linux.

Поиск содержимого файла с помощью Midnigh Commander

Внутри терминала mc обеспечивает визуальное представление файловой системы, в которой вы можете перемещаться с помощью клавиатуры или мыши. Для поиска содержимого файла вы можете открыть диалоговое окно поиска, нажав ALT+SHIFT+? и введите текст в поле «Содержание:».

Поиск содержимого файла с помощью Midnight Commander

Как вы можете видеть на рисунке выше, вы также можете использовать фильтры, такие как игнорирование регистра, целые слова и регулярное выражение, просто установив или сняв соответствующий флажок.

Поиск содержимого файла с использованием фильтров

Заключение

Все вышеперечисленные приложения удобны для начинающих, бесплатны для использования и имеют открытый исходный код для добавления собственных улучшений. Кроме того, вы также можете попробовать другие бесплатные инструменты, такие как Ack, The Silver Searcher, Ripgrep и команду find.

Linux, независимо от используемого вами дистрибутива, поставляется с рядом инструментов с графическим интерфейсом, которые позволяют искать файлы. Многие современные файловые менеджеры поддерживают поиск файлов прямо в списке файлов. Однако есть ряд ситуаций, когда вам нужно использовать консоль, например, во время сеанса SSH или когда X-сервер не запускается. Вот как можно быстро найти файлы, содержащие определенный текст, с помощью терминала.

Если вы можете использовать графический интерфейс, поиск файлов не проблема. В моей любимой среде рабочего стола XFCE файловый менеджер Thunar позволяет искать файлы, вводя имя файла непосредственно в списке файлов.

Однако ни один из файловых менеджеров, которые я пробовал, не позволяет искать содержимое файлов.

Чтобы обойти это ограничение при работе в сеансе GUI, вы можете использовать Сatfish. Сatfish — популярный поисковый инструмент. Это позволяет искать содержимое файла. Вам нужно нажать на значок шестеренки и включить параметр Поиск по содержимому файла.

Однако когда дело доходит до терминала, вы не можете использовать какие-либо графические инструменты. Кроме того, я считаю Catfish бесполезным и предпочитаю классические консольные инструменты. Вот методы и инструменты, которые я использую.

Чтобы найти файлы, содержащие определенный текст в Linux, сделайте следующее.

  1. Откройте любимое терминальное приложение. Лично я предпочитаю терминал XFCE4.
  2. Введите следующую команду:
    find ./ -type f -exec grep -l "искомый текст" <> \;
  3. Это создаст список файлов, содержащих необходимую текстовую часть.

Команда find будет искать файлы, начиная с текущего каталога "./". Вместо этого вы можете указать желаемый путь.

Опция -type f указывает искать только файлы и исключать каталоги. Кроме того, вы можете настроить поиск только для файлов определенного типа, добавив следующую опцию:
find ./ -type f -iname "*.txt" -exec grep -l "искомый текст" <> \ ;

Посмотрите на следующий снимок экрана:

Опция -exec вызывает инструмент grep для каждого из соответствующих файлов, чтобы проверить их содержимое. Если текст найден в файле, его имя будет добавлено к выводу благодаря опции -l.

Linux, независимо от используемого вами дистрибутива, поставляется с рядом инструментов с графическим интерфейсом, которые позволяют искать файлы. Многие современные файловые менеджеры поддерживают поиск файлов прямо в списке файлов. Однако большинство из них не позволяют выполнять поиск внутри содержимого файла. Вот два метода, которые вы можете использовать для поиска содержимого файлов в Linux.


Возможно, есть и другие доступные методы. Есть Catfish, популярный инструмент поиска с поисковым индексом, который может очень быстро найти ваши файлы. Он поставляется с возможностью поиска содержимого файла, но у меня он работает ненадежно.

Я хотел бы поделиться методами, которыми пользуюсь сам.
Первый метод использует утилиту grep, которая есть в любом дистрибутиве, даже во встроенных системах, построенных на busybox.

Чтобы найти файлы, содержащие определенный текст в Linux, сделайте следующее.

  1. Откройте любимое терминальное приложение. Лично я предпочитаю терминал XFCE4.
  2. Перейдите (если требуется) к папке, в которой вы собираетесь искать файлы с определенным текстом.
  3. Введите следующую команду:

Вот переключатели:
-i - игнорировать регистр текста
-R - рекурсивно искать файлы в подкаталогах.
-l - показывать имена файлов вместо частей содержимого файла.

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

Примечание. Другие полезные ключи, которые вы можете использовать с grep:
-n — показать номер строки.
-w - соответствует всему слову.

Еще один метод, который я использую, — это Midnight Commander (mc), консольный файловый менеджер. В отличие от grep, mc не включен по умолчанию во всех дистрибутивах Linux, которые я пробовал. Возможно, вам придется установить его самостоятельно.

Найти файлы, содержащие определенный текст, с помощью mc

Чтобы найти файлы, содержащие определенный текст, с помощью Midnight Commander, запустите приложение и нажмите на клавиатуре следующую последовательность:
Alt + Shift + ?
Откроется диалоговое окно поиска.

Заполните раздел "Содержание:" и нажмите клавишу Enter. Он найдет все файлы с требуемым текстом.

Вы можете поместить эти файлы на левую или правую панель с помощью параметра Panelize и копировать/перемещать/удалять/просматривать/делать с ними все, что хотите.

Midnight Commander очень экономит время при поиске.

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

Если вам понравилась эта статья, поделитесь ею с помощью кнопок ниже. Это не потребует от вас многого, но поможет нам расти. Спасибо за вашу поддержку!

Автор: Сергей Ткаченко

Сергей Ткаченко — разработчик программного обеспечения из России, который основал Winaero еще в 2011 году. В этом блоге Сергей пишет обо всем, что связано с Microsoft, Windows и популярным программным обеспечением. Следите за ним в Telegram, Twitter и YouTube. Просмотреть все сообщения Сергея Ткаченко

6 мыслей о «Найти файлы, содержащие определенный текст в Linux»

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

Многие современные файловые менеджеры поддерживают поиск файлов непосредственно в списке файлов. Во всяком случае, большинство из них не позволяют вам искать содержимое файла. Вот несколько методов, которые вы можете использовать для поиска содержимого файлов в Linux с помощью командной строки. В этом фрагменте мы представим команды «grep», «ripgrep», «ack» и «find».

Используйте команду grep

Лучший способ поиска файлов, содержащих определенный текст, — использовать команду grep. Он предназначен для поиска файлов, содержащих нужный текст, по шаблонам во всех потоках данных. Вам нужно использовать следующую команду:

Здесь r обозначает рекурсивный, n обозначает номер строки, w используется для соответствия всему слову, '/path/to/somewhere/' – это каталог, а 'pattern' – текст, который вы ищете в файлах.

Чтобы сделать поиск более эффективным, вы также можете добавить такие необязательные параметры, как --exclude, --include, --exclude-dir.

  • Чтобы выполнять поиск только среди файлов с расширениями .c или .h, используйте следующее:
  • Чтобы исключить из поиска все файлы с расширением .o, попробуйте следующее:
  • Чтобы исключить конкретный каталог из поиска, вам нужно следующее:

Вы также можете запустить другую командную строку с помощью grep:

Здесь i означает игнорирование регистра, R означает рекурсию, I используется для отображения имени файла, а не самого результата , а ./ означает запуск в корневом каталоге вашей машины.

Используйте команду ripgrep

Другим вариантом использования grep является ripgrep. Если вы работаете над большими проектами или большими файлами, вам лучше использовать ripgrep. Это будет выглядеть так:

Используйте команду подтверждения

Эта команда позволит вам искать во всей файловой системе или по нужному пути. Это может быть проще в использовании, чем grep.

  • Для поиска по текущему пути используйте следующую командную строку:
  • Для поиска во всей файловой системе измените каталог на корень (/) следующим образом:

Используйте команду поиска

Вы также можете комбинировать команды find и grep для более эффективного поиска текстовых строк во многих файлах.

Для поиска в файлах с определенными расширениями файлов, например для поиска «ваш-текст» только во всех файлах php, используйте следующую команду:

Читайте также: