linux - 如何搜索多个pdf文件的内容?
我怎样才能在目录/子目录中搜索PDF文件的内容? 我正在寻找一些命令行工具。 看来grep无法搜索PDF文件。
12个解决方案
181 votes
有pdfgrep,它正如它的名字所暗示的那样。
pdfgrep -R 'a pattern to search recursively from path' /some/path
我用它进行简单搜索,效果很好。
(Debian,Ubuntu和Fedora都有软件包。)
从版本1.3.0开始,pdfgrep支持递归搜索。 自Ubuntu 12.10(Quantal)以来,这个版本在Ubuntu中可用。
Graeme answered 2019-03-18T09:54:16Z
176 votes
您的发行版应提供名为pdftotext的实用程序:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' ;
“ - ”是将pdftotext输出到stdout而不是文件的必要条件。pdftotext和grep选项将文件名放在grep的输出中。可选的pdfgrep标志很好,告诉grep使用终端上的颜色输出。
(在Ubuntu中,pdftotext由包grep或pdfgrep提供。)
如果要使用pdfgrep不支持的GNU grep的功能,则使用pdftotext和grep的此方法优于pdfgrep。 注意:pdfgrep-1.3.x支持-C选项用于打印上下文行。
sjr answered 2019-03-18T09:53:29Z
23 votes
Recoll是一个出色的全文GUI搜索应用程序,适用于Unix / Linux,支持许多不同的格式,包括PDF。 它甚至可以将查询的确切页码和搜索项传递给文档查看器,从而允许您直接从其GUI跳转到结果。
Recoll还带有可行的命令行界面和Web浏览器界面。
Glutanimate answered 2019-03-18T09:54:48Z
11 votes
我的pdfgrep(1.3.0)的实际版本允许以下内容:
pdfgrep -HiR 'pattern' /path
在做pdfgrep --help时:
H:打印每个匹配的文件名。
我:忽略案件区别。
R:递归搜索目录。
它在我的Ubuntu上运行良好。
arkhi answered 2019-03-18T09:55:49Z
7 votes
我做了这个破坏性的小脚本。 玩得开心。
function pdfsearch()
{
find . -iname '*.pdf' | while read filename
do
#echo -e "033[34;1m// === PDF document:033[33;1m $filename033[0m"
pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
# remove it! rm -f "$filename."
done
}
phil answered 2019-03-18T09:56:18Z
2 votes
我有同样的问题,因此我写了一个脚本,搜索指定文件夹中的所有pdf文件的字符串,并打印与查询字符串匹配的PDF文件。
也许这会对你有所帮助。
您可以在这里下载
Paul Weibert answered 2019-03-18T09:56:58Z
2 votes
如果要使用pdftotext查看文件名,请使用以下命令:
find . -name '*.pdf' -exec echo {} ; -exec pdftotext {} - ; | grep "pattern|pdf"
Aleksey Kontsevich answered 2019-03-18T09:57:26Z
2 votes
我喜欢@ sjr的答案,但我更喜欢xargs vs -exec。 我发现xargs更加通用。 例如,使用-P,我们可以在有意义的情况下利用多个CPU。
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
Deian answered 2019-03-18T09:57:55Z
1 votes
有一个开源的公共资源grep工具crgrep可以在PDF文件中搜索,也可以搜索其他资源,例如嵌套在档案,数据库表,图像元数据,POM文件依赖项和Web资源中的内容 - 以及这些资源的组合,包括递归搜索。
“文件”选项卡下的完整描述几乎涵盖了该工具支持的内容。
我开发了crgrep作为开源工具。
Craig answered 2019-03-18T09:58:36Z
1 votes
首先将所有pdf文件转换为文本文件:
for file in *.pdf;do pdftotext "$file"; done
然后正常使用grep。 这是特别好的,因为当您有多个查询和大量PDF文件时它很快。
Martin Thoma answered 2019-03-18T09:59:09Z
0 votes
您需要一些工具,如pdf2text,首先将您的PDF转换为文本文件,然后在文本内搜索。 (您可能会遗漏一些信息或符号)。
如果您使用的是编程语言,可能会为此目的编写pdf库。 例如 Perl的[http://search.cpan.org/dist/CAM-PDF/]
Nylon Smile answered 2019-03-18T09:59:44Z
-1 votes
尝试在如上所述的简单脚本中使用'acroread'