如何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-utils
或poppler-utils
。)
如果您想使用pdfgrep
不支持的GNU grep
特性,则使用pdftotext
和grep
方法比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”