Способи оплати 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

Сподіваємося, що ці інструменти допоможуть вам знайти потрібні файли та рядки швидко та ефективно. Який би ви не вибрали, усі вони пропонують вдосконалений пошук, який може значно прискорити вашу роботу.