How to search contents of multiple pdf files?
如何在目录/子目录中搜索PDF文件的内容? 我正在寻找一些命令行工具。 似乎
有pdfgrep,它的功能恰如其名。
1 | pdfgrep -R 'a pattern to search recursively from path' /some/path |
我已经将其用于简单搜索,并且效果很好。
(在Debian,Ubuntu和Fedora中有软件包。)
从1.3.0版开始,pdfgrep支持递归搜索。自Ubuntu 12.10(Quantal)起,此版本已在Ubuntu中可用。
您的发行版应提供一个名为
1 | find /path -name '*.pdf' -exec sh -c 'pdftotext"{}" - | grep --with-filename --label="{}" --color"your pattern"' \; |
要使pdftotext输出到stdout,而不是文件,必须使用"-"。
可选的
(在Ubuntu中,
如果要使用
Recoll是用于Unix / Linux的出色的全文本GUI搜索应用程序,它支持包括PDF在内的多种不同格式。它甚至可以将查询的确切页码和搜索词传递给文档查看器,从而使您可以直接从其GUI跳转到结果。
Recoll还具有可行的命令行界面和Web浏览器界面。
我的pdfgrep(1.3.0)的实际版本允许以下操作:
1 | pdfgrep -HiR 'pattern' /path |
在执行
- H:打印每个匹配项的文件名。
- i:忽略大小写区别。
- R:递归搜索目录。
它在我的Ubuntu上运行良好。
我做了这个破坏性的小脚本。玩得开心。
1 2 3 4 5 6 7 8 9 | 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 } |
我喜欢@sjr的答案,但是我更喜欢xargs与-exec。我发现xargs更通用。例如,使用-P时,我们可以利用多个CPU。
1 | find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color"pattern" |
如果要使用pdftotext查看文件名,请使用以下命令:
1 | find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep"pattern\|pdf" |
我遇到了同样的问题,因此编写了一个脚本,该脚本在指定文件夹中的所有pdf文件中搜索字符串,然后打印与查询字符串匹配的PDF文件。
也许这对您有帮助。
你可以在这里下载
首先将您所有的pdf文件转换为文本文件:
1 | for file in *.pdf;do pdftotext"$file"; done |
然后正常使用
有一个开放源代码的公共资源grep工具crgrep,它可以在PDF文件中进行搜索,还可以在其他资源中进行搜索,例如嵌套在档案中的内容,数据库表,图像元数据,POM文件依赖项和Web资源-以及它们的组合,包括递归搜索。
文件选项卡下的完整描述几乎涵盖了该工具支持的内容。
我将crgrep开发为开源工具。
还有另一个名为ripgrep-all的实用程序,它基于ripgrep。
它不仅可以处理PDF文档(例如Office文档和电影),而且作者声称它比
用于递归搜索当前目录的命令语法,第二个语法仅限于PDF文件:
1 2 | rga 'pattern' . rga --type pdf 'pattern' . |
尝试在上述简单脚本中使用" acroread"
您需要诸如pdf2text之类的工具,才能将pdf转换为文本文件,然后在文本内部进行搜索。 (您可能会错过一些信息或符号)。
如果您使用的是编程语言,则可能为此目的编写了pdf库。例如http://search.cpan.org/dist/CAM-PDF/ for Perl