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 在 解析实现
80 每月下载量
320KB
3.5K SLoC
rga: ripgrep,同时搜索PDF、电子书、Office文档、zip、tar.gz等。
rga是一个面向行的搜索工具,允许你在多种文件类型中查找正则表达式。rga包装了出色的ripgrep并使其能够搜索pdf、docx、sqlite、jpg、电影字幕(mkv、mp4)等。
更多详情,请参阅这篇介绍性博客: 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
与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
请注意,通过chocolatey或scoop安装是唯一支持的下载方法。如果您手动从发行版中下载二进制文件,将不会获取依赖项(例如来自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
来设置所有构建和运行时依赖项
依赖项
~65MB
~1.5M SLoC