如何search多个pdf文件的内容?

我怎样才能search目录/子目录中的PDF文件的内容? 我正在寻找一些命令行工具。 看来, grep不能searchPDF文件。

你的发行版应该提供一个名为pdftotext的工具:

 find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \; 

“ – ”是必须有pdftotext输出到标准输出,而不是文件。 --with-filename--label=选项会把文件名放在grep的输出中。 可选的--color标志很好,并告诉grep使用terminal上的颜色输出。

(在Ubuntu中, pdftotext由软件包xpdf-utilspoppler-utils 。)

如果您想使用pdfgrep不支持的GNU grep特性,则使用pdftotextgrep方法比pdfgrep优势。 注意 :pdfgrep-1.3.x支持上下文打印行的-C选项。

有pdfgrep ,这正是它的名字所暗示的。

 pdfgrep -R 'a pattern to search recursively from path' /some/path 

我用它进行简单的search,它工作正常。

(在Debian,Ubuntu和Fedora中有软件包。)

从版本1.3.0开始pdfgrep支持recursionsearch。 从Ubuntu 12.10(Quantal)开始,这个版本在Ubuntu上可用。

Recoll是一个非常棒的Unix / Linux全文GUIsearch应用程序,支持数十种不同的格式,包括PDF。 它甚至可以将确切的页码和查询的search项传递给文档查看器,从而允许您从其GUI直接跳转到结果。

Recoll还带有一个可行的命令行界面和一个网页浏览器界面 。

我的实际版本的pdfgrep(1.3.0)允许以下内容:

 pdfgrep -HiR 'pattern' /path 

在做pdfgrep --help

  • H:打印每个匹配的文件名。
  • 我:忽略案件的区别。
  • R:recursionsearch目录。

它在我的Ubuntu上运行良好。

我做了这个破坏性的小脚本。 玩得开心。

 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 } 

我有同样的问题,因此我写了一个脚本,search指定文件夹中的所有pdf文件的string,并打印匹配查询string的PDF文件。

也许这会对你有所帮助。

你可以在这里下载

如果您想使用以下命令查看带有pdftotext的文件名:

 find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf" 

我喜欢@ sjr的回答,但是我更喜欢xargs vs -exec。 我发现xargs更通用。 例如在-P的情况下,我们可以利用多个CPU。

 find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern" 

有一个开源的公共资源grep工具crgrep可以在PDF文件中search,也可以在嵌套在归档,数据库表,图像元数据,POM文件依赖关系和网页资源中的其他资源(包括内容)以及这些资源的组合(包括recursionsearch)中进行search。

“文件”选项卡下的完整说明几乎涵盖了该工具支持的内容。

我开发了crgrep作为开源工具。

你需要一些工具,比如pdf2text,首先将你的pdf转换成文本文件,然后在文本中search。 (你可能会错过一些信息或符号)。

如果您使用的是编程语言,则可能为此编写了pdf库。 例如Perl的http://search.cpan.org/dist/CAM-PDF/

首先将所有的PDF文件转换为文本文件:

 for file in *.pdf;do pdftotext "$file"; done 

然后grep使用grep 。 这是非常好的,因为当你有多个查询和大量的PDF文件时,它是快速的。

尝试在上面的简单脚本中使用“acroread”