我该如何在目录/子目录中搜索PDF文件的内容?我正在寻找一些命令行工具。似乎grep
无法搜索PDF文件。
我该如何在目录/子目录中搜索PDF文件的内容?我正在寻找一些命令行工具。似乎grep
无法搜索PDF文件。
pdfgrep
现在已经具有递归选项,包括 -R
选项以跟随符号链接。 - Tobias Kienzler您的发行版应该提供名为pdftotext
的实用工具:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
在使用pdftotext将内容输出到标准输出时,需要添加"-"选项,否则会输出到文件中。
使用--with-filename
和--label=
选项可以将文件名放在grep的输出中。
可选的--color
选项很不错,可以让grep在终端上以彩色模式输出。
(在Ubuntu中,pdftotext由包xpdf-utils或poppler-utils提供。)
如果您想使用GNU grep的功能,而pdfgrep不支持这些功能,则使用pdftotext和grep这种方法具有优势。 注意: pdfgrep-1.3.x支持-C
选项以打印上下文行。
grep
过滤了打印的文件名。 - Raphael Ahrenspdfgrep
的解决方案对于快速简单的搜索很好,但通常我想要获取一些上下文,因为单独的一行不够有帮助。所以正如我在这个答案中添加的那样:例如,你可以在"你的模式"之前加上-C5选项,以将5行上下文包含在输出中-- pdfgrep不支持这个功能。 - Colin D Bennettpdfgrep
是无用的,它报告了大量垃圾文件。另一方面,您的解决方案很有帮助。所以请不要删除它,即使过去3年了,它仍然很有用! - Alirecoll / xapian
会是什么样子?谢谢! - nutty about nattypwd
ext:pdf 'neuro*' -- stackoverflow 吃掉了反引号。 - medoc我实际使用的pdfgrep版本是1.3.0,它可以执行以下操作:
pdfgrep -HiR 'pattern' /path
执行pdfgrep --help
时:
它在我的Ubuntu上运行良好。
还有一个实用工具叫做 ripgrep-all,它基于 ripgrep。
它不仅可以处理PDF文档,还可以处理Office文档和电影等文件类型,并且作者 声称 它比pdfgrep
更快。
命令语法可递归搜索当前目录,第二个命令限制只搜索PDF文件:
rga 'pattern' .
rga --type pdf 'pattern' .
function pdfsearch()
{
find . -iname '*.pdf' | while read filename
do
#echo -e "\033[34;1m// === PDF Document:\033[33;1m $filename\033[0m"
pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
# remove it! rm -f "$filename."
done
}
grep
中,而不是使用 $filename.
。 - Raphael Ahrens我喜欢@sjr的回答,但是我更喜欢使用xargs而不是-exec。我发现xargs更加灵活。例如,通过-P选项,我们可以在合适的时候利用多个CPU。
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs
的并行处理能力,有一个有趣的观点。请注意,您的--label
选项参数将被“字面”解释为“{}”,因为grep
命令现在不再在find
的exec
上下文中执行。 - mklement0
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
首先将所有的pdf文件转换为文本文件:
for file in *.pdf;do pdftotext "$file"; done
然后像平常一样使用 grep
。这种方法特别适用于在有多个查询和大量PDF文件时,因为它非常快。
ag
https://github.com/ggreer/the_silver_searcher 结合使用时。能够在微秒级别上解析出几个GB的数据。平面文件永存。 - NVRM