Способы оплаты Abuse

Поиск файлов по содержимому в Linux: ack и ripgrep

03.05.2023, 23:33

Использование поиска файлов по содержимому в Linux позволяет существенно сократить время и усилия при поиске конкретной информации в больших и сложных файловых системах. 

Для чего нужен поиск файлов по содержимому

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

Поиск файлов по содержимому может использоваться для различных задач, например для поиска:

  • определенного текста в больших текстовых файлах
  • конфигурационных файлов и скриптов, содержащих определенные настройки или команды
  • файлов, содержащих определенные данные, такие как имена пользователей или номера телефонов
  • файлов по типу содержимого, например, поиск всех файлов, содержащих изображения формата JPEG или PDF-документы.

Общим назначением поиска файлов по содержимому является облегчение работы с файловой системой и нахождение необходимой информации в файловой системе.

ack

Начнём с утилиты ack. Она была создана в 2005 году как альтернатива grep и быстро стала популярной среди разработчиков.

 Она имеет несколько преимуществ перед grep, включая:

  • более интеллектуальный поиск по файлам и исключениям. Ack по умолчанию ищет только в файлах, которые могут иметь смысл, например, исключая папки .svn или .git. И вы можете добавлять свои правила и исключения;
  • поиск в скрытых файлах и директориях по умолчанию;
  • Ack не пытается искать везде, даже в системных папках, как grep. Это означает, что вы можете легко найти файлы, скрытые в системе.

 Примеры использования ack:

  • Найти все файлы в текущей папке и её подпапках, содержащие слово "test": ack "test"
  • То же самое, но исключая файлы с расширением .bak: ack "test" --ignore-file=match:/\.bak$/
  • Найти все файлы в текущей папке, содержащие строку "hello", и вывести первые 2 строки каждого файла: ack "hello" --heading --max-count=2

ripgrep

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

 Вот несколько примеров:

  1. Найти все файлы в текущей папке и её подпапках, содержащие слово "test": rg "test"
  2. То же самое, но исключая файлы с расширением .bak: rg "test" --glob "!*.bak"
  3. Найти все файлы в текущей папке, содержащие строку "hello", и вывести первые 2 строки каждого файла: rg "hello" --heading --max-columns=2

В конце стоит упомянуть fzf. Это не только поисковик строк, как ack и ripgrep. Fzf используется в качестве утилиты для поиска файлов, папок и элементов в списке. В остальном он работает подобно ack/ripgrep, но с добавленной возможностью живой фильтрации результатов. Вот несколько примеров:

  • Искать файлы, начинающиеся с буквы F на вашем компьютере: locate F | fzf -m
  • Выйти из текущей папки и перейти в директорию, которую я хочу: cd **<TAB> | fzf
  • Выбрать ревизии SVN и скопировать номер в буфер обмена: svn log | fzf --reverse --ansi | awk '{print $1}' | pbcopy

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