#file #ripgrep #adapter #tar #zip-archive #pdf #rga

bin+lib ripgrep_all

rga: ripgrep,同时搜索PDF、电子书、Office文档、zip、tar.gz等

22个版本

0.10.6 2024年1月16日
0.9.6 2020年5月19日
0.9.3 2019年9月19日
0.9.2 2019年6月19日

#349解析实现

Download history 57/week @ 2024-03-11 44/week @ 2024-03-18 15/week @ 2024-03-25 43/week @ 2024-04-01 39/week @ 2024-04-08 15/week @ 2024-04-15 28/week @ 2024-04-22 22/week @ 2024-04-29 26/week @ 2024-05-06 71/week @ 2024-05-13 47/week @ 2024-05-20 16/week @ 2024-05-27 23/week @ 2024-06-03 22/week @ 2024-06-10 21/week @ 2024-06-17 14/week @ 2024-06-24

80 每月下载量

AGPL-3.0-or-later

320KB
3.5K SLoC

rga: ripgrep,同时搜索PDF、电子书、Office文档、zip、tar.gz等。

rga是一个面向行的搜索工具,允许你在多种文件类型中查找正则表达式。rga包装了出色的ripgrep并使其能够搜索pdf、docx、sqlite、jpg、电影字幕(mkv、mp4)等。

github repo Crates.io fearless concurrency

更多详情,请参阅这篇介绍性博客: https://phiresky.github.io/blog/2019/rga--ripgrep-for-zip-targz-docx-odt-epub-jpg/

rga会递归地进入存档,并匹配它所知的每种文件类型中的文本。

这里是一个包含不同文件类型的示例目录

demo/
├── greeting.mkv
├── hello.odt
├── hello.sqlite3
└── somearchive.zip
├── dir
│ ├── greeting.docx
│ └── inner.tar.gz
│ └── greeting.pdf
└── greeting.epub

rga output

与fzf集成

rga-fzf

有关将rga与fzf集成的说明,请参阅Wiki

安装

Linux x64、macOS和Windows的二进制文件可在GitHub发行版中找到。

Linux

Arch Linux

pacman -S ripgrep-all

Nix

nix-env-iA nixpkgs.ripgrep-all

基于Debian

下载rga二进制文件并获取依赖项,如下所示

apt install ripgrep pandoc poppler-utils ffmpeg

如果ripgrep没有包含在你的包源中,可以从这里获取。

rga将搜索它调用的所有二进制文件,包括$PATH和自身所在的目录。

Windows

请注意,通过chocolateyscoop安装是唯一支持的下载方法。如果您手动从发行版中下载二进制文件,将不会获取依赖项(例如来自poppler的pdftotext)。

如果您遇到像以下错误 VCRUNTIME140.DLL could not be found 的情况,您需要安装 vc_redist.x64.exe

Chocolatey

choco install ripgrep-all

Scoop

scoop install rga

Homebrew/Linuxbrew

rga 可以使用 Homebrew 进行安装

brewinstall rga

安装一些并非严格必要但非常有用的依赖

brewinstall pandoc poppler ffmpeg

从源码编译

rga 应该使用稳定的 Rust (v1.75.0+) 进行编译(使用 rustc --version 检查)。要构建它,请运行以下命令(或您操作系统中的等效命令)

~$ apt install build-essential pandoc poppler-utils ffmpeg ripgrep cargo
~$ cargo install --locked ripgrep_all
~$ rga --version    # this should work now

可用适配器

rga 与 适配器 一起工作,这些适配器可以适应各种文件格式。它包含一些内置的适配器

rga --rga-list-adapters

您还可以添加 自定义适配器。有关更多信息,请参阅 Wiki

适配器

  • pandoc 使用 pandoc 将二进制/不可读的文本文档转换为类似 markdown 的纯文本。运行:pandoc --from= --to=plain --wrap=none --markdown-headings=atx
    扩展名:.epub, .odt, .docx, .fb2, .ipynb, .html, .htm

  • poppler 使用 pdftotext(来自 poppler-utils)从 PDF 文件中提取纯文本。运行:pdftotext - -
    扩展名:.pdf
    MIME 类型:application/pdf

  • postprocpagebreaks 为指定为 ASCII 页面分隔符的页面分隔符的输入文件添加页码。主要供 poppler 适配器内部使用。
    扩展名:.asciipagebreaks

  • ffmpeg 使用 ffmpeg 提取视频元数据/章节、字幕、歌词和其他元数据
    扩展名:.mkv, .mp4, .avi, .mp3, .ogg, .flac, .webm

  • zip 将 zip 文件作为流读取并递归地深入到其内容中
    扩展名:.zip, .jar
    MIME 类型:application/zip

  • decompress 将压缩文件作为流读取并运行不同的提取器对内容进行处理。
    扩展名:.als, .bz2, .gz, .tbz, .tbz2, .tgz, .xz, .zst
    MIME 类型:application/gzip, application/x-bzip, application/x-xz, application/zstd

  • tar 将 tar 文件作为流读取并递归地深入到其内容中
    扩展名:.tar

  • sqlite 使用 sqlite 绑定将 sqlite 数据库转换为简单的纯文本格式
    扩展名:.db, .db3, .sqlite, .sqlite3
    MIME 类型:application/x-sqlite3

以下适配器默认禁用,可以使用 '--rga-adapters=+foo,bar' 启用

  • mail 读取 mailbox/mail 文件并对内容和附件运行提取器。
    扩展名:.mbox, .mbx, .eml
    MIME 类型:application/mbox, message/rfc822

用法

rga [RGA 选项] [RG 选项] 模式 [路径 ...]

标志

--rga-accurate

使用更精确但较慢的按 MIME 类型匹配

默认情况下,rga 将使用文件扩展名匹配文件。一些程序,如 sqlite3,根本不关心文件扩展名,因此用户有时使用任何或没有扩展名。使用此标志,rga 将尝试使用魔数字节(类似于 `file` 工具)检测输入文件的 MIME 类型,并使用该类型选择适配器。检测仅针对文件的前 8KiB 进行,因为我们不能总是对输入进行搜索(在归档中)。

--rga-no-cache

禁用结果缓存

默认情况下,如果提取的文本足够小,rga 将将其缓存到 Linux 上的 ${XDG_CACHE_DIR-~/.cache}/ripgrep-all,macOS 上的 ~/Library/Caches/ripgrep-all 或 Windows 上的 C:\Users\username\AppData\Local\ripgrep-all 的数据库中。这样,对同一组文件的重复搜索将更快。如果您传递此标志,将禁用所有缓存。

-h--help

打印帮助信息

--rga-list-adapters

列出所有已知的适配器

--rga-print-config-schema

打印配置文件的JSON Schema

--rg-help

显示ripgrep自身的帮助信息

--rg-version

显示ripgrep自身的版本

-V--version

打印版本信息

选项

--rga-adapters=<adapters>...

更改要使用的适配器及其优先级顺序(降序)

"foo,bar" 表示只使用foo和bar适配器。"-bar,baz" 表示使用除bar和baz之外的所有默认适配器。"+bar,baz" 表示使用所有默认适配器以及bar和baz。

--rga-cache-compression-level=<compression-level>

在存储到缓存数据库之前对适配器输出应用ZSTD压缩级别

范围从1 - 22 [默认:12]

--rga-config-file=<config-file-path>

--rga-max-archive-recursion=<max-archive-recursion>

递归到归档的最大嵌套层数 [默认:5]

--rga-cache-max-blob-len=<max-blob-len>

缓存的最大压缩大小

存储在缓存中的最长字节长度(压缩后)。较长的适配器输出将不会被缓存,每次都会重新计算。

命令行上允许的后缀:k M G [默认:2000000]

--rga-cache-path=<path>

存储缓存数据库的路径 [默认:/home/phire/.cache/ripgrep-all]

-h 显示简明概述,--help 显示更多细节和高级选项。

此处未显示的所有其他选项将直接传递给rg,特别是[PATTERN]和[PATH ...]

开发

启用调试日志记录

export RUST_LOG=debug
export RUST_BACKTRACE=1

还请记住,使用--rga-no-cache禁用缓存或在macOS上(~/Library/Caches/rga),在其他Unix系统上(~/.cache/rga)或Windows上(C:\Users\username\AppData\Local\rga)清除缓存以调试适配器。

Nix和Direnv

您可以使用提供的 flake.nix 来设置所有构建和运行时依赖项

  1. 在您的Nix配置中启用 Flakes
  2. direnv 添加到您的配置文件:nix profile install nixpkgs#direnv
  3. cd 进入您克隆此目录的目录。
  4. 允许使用 .envrcdirenv allow
  5. 依赖项安装完毕后,您的shell现在将拥有所有必要的开发依赖项。

依赖项

~65MB
~1.5M SLoC