Инструмент ripgrep-all (rga) расширяет возможности популярного утилитарного поиска ripgrep, добавляя нативную поддержку бинарных и сложных форматов. В отличие от стандартного rg, который работает только с текстовыми файлами, rga автоматически извлекает текст из документов, баз данных и медиа, используя систему адаптеров.
Ключевые возможности и поддержка форматов
Утилита рекурсивно спускается в архивы (ZIP, TAR, GZ) и ищет совпадения во всех вложенных файлах. Поддерживаются следующие типы данных через встроенные адаптеры:
- Документы: PDF, DOCX, ODT, EPUB, FB2, HTML (через Pandoc).
- Медиа: Субтитры и метаданные из MKV, MP4, AVI, MP3, FLAC (через FFmpeg).
- Базы данных: SQLite (.db, .sqlite3) с конвертацией в plain text.
- Архивы: ZIP, JAR, BZ2, GZ, XZ, ZST, TAR.
Технические детали и производительность
Для ускорения повторных запросов rga использует кэширование. Извлеченный текст сжимается алгоритмом ZSTD (уровень сжатия по умолчанию — 12) и сохраняется в базу данных. По умолчанию кэш хранится в $XDG_CACHE_DIR/ripgrep-all (Linux) или ~/Library/Caches/ripgrep-all (macOS). Максимальный размер кэшируемого блока — 2 МБ (после сжатия), глубина вложенности архивов ограничена 5 уровнями.
Разработчик также добавил флаг --rga-accurate, который использует определение MIME-типа по «магическим числам» (первые 8 КБ файла) вместо расширения. Это критично для файлов без расширений или с нестандартными именами, например, баз SQLite.
Сравнение адаптеров
| Адаптер | Внешняя зависимость | Поддерживаемые расширения | Примечание |
|---|---|---|---|
| pandoc | pandoc | .epub, .odt, .docx, .fb2, .ipynb, .html | Конвертация в markdown-like текст |
| poppler | poppler-utils (pdftotext) | Извлечение текста из PDF | |
| ffmpeg | ffmpeg | .mkv, .mp4, .avi, .mp3, .ogg, .flac, .webm | Субтитры, метаданные, главы |
| sqlite | sqlite3 (bindings) | .db, .db3, .sqlite, .sqlite3 | Конвертация таблиц в текст |
| zip/tar | Встроенные | .zip, .jar, .tar | Рекурсивный обход архивов |
Установка и интеграция
Инструмент написан на Rust (требуется версия 1.75.0+) и доступен для Linux, macOS и Windows. На Windows рекомендуется использовать choco или scoop для автоматической установки зависимостей (например, vc_redist.x64.exe).
Команды для установки в популярных дистрибутивах:
- Arch Linux:
pacman -S ripgrep-all - Debian/Ubuntu:
apt install ripgrep pandoc poppler-utils ffmpeg+ бинарник из релизов - Homebrew:
brew install rga - Из исходников:
cargo install --locked ripgrep_all
Для продвинутого поиска рекомендуется интеграция с fzf (Find-Z-File), что позволяет использовать rga как бэкенд для интерактивного фильтрации результатов в терминале.
Источник: Github ↗
