如何在目录/子目录中搜索PDF文件的内容?我正在寻找一些命令行工具。似乎grep
无法搜索PDF文件。
如何在目录/子目录中搜索PDF文件的内容?我正在寻找一些命令行工具。似乎grep
无法搜索PDF文件。
Answers:
您的发行版应提供一个名为的实用程序pdftotext
:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
要使pdftotext输出到stdout,而不是文件,必须使用“-”。在--with-filename
和--label=
选项将在grep的输出把文件名。可选--color
标志很不错,它告诉grep使用终端上的颜色进行输出。
(在Ubuntu中,pdftotext
由xpdf-utils
或提供poppler-utils
。)
这种方法,使用pdftotext
和grep
,拥有一个优势pdfgrep
,如果你想使用GNU的特点grep
是pdfgrep
不支持。注意:pdfgrep-1.3.x支持-C
打印上下文行的选项。
grep
过滤了打印的文件名。
pdfgrep
解决方案非常适合快速,简单的搜索,但我经常想获得一些上下文信息,因为单行的效果不够好-因此,正如我在此答案中所添加的:例如,您可以添加-“ C5”选项在“您的模式”之前包含到输出的5行上下文– pdfgrep不支持此选项
pdfgrep
,它没有用,它报告了它无法处理的文件上的大量垃圾。另一方面,您的解决方案有所帮助。因此,请不要删除它,即使3年后它还是有帮助的!
pdfgrep -R 'a pattern to search recursively from path' /some/path
我已经将其用于简单搜索,并且效果很好。
(在Debian,Ubuntu和Fedora中有软件包。)
从1.3.0版开始,pdfgrep支持递归搜索。自Ubuntu 12.10(Quantal)起,此版本已在Ubuntu中可用。
pdfgrep
现在确实具有该递归选项,包括-R
也遵循符号链接
Recoll是用于Unix / Linux的出色的全文本GUI搜索应用程序,它支持包括PDF在内的多种不同格式。它甚至可以将查询的确切页码和搜索词传递给文档查看器,从而使您可以直接从其GUI跳转到结果。
Recoll还具有可行的命令行界面和Web浏览器界面。
recoll / xapian
在命令行中(非GUI)的外观如何?谢谢!
pwd
ext :pdf'neuro *'-stackoverflow吃掉了pwd周围的反引号。
我做了这个破坏性的小脚本。玩得开心。
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
}
$filename.
您应该用管道代替它grep
。
还有另一个名为ripgrep-all的实用程序,它基于ripgrep。
它不仅可以处理PDF文档(例如Office文档和电影),而且作者声称它比更快pdfgrep
。
递归搜索当前目录的命令语法,第二个语法仅限于PDF文件:
rga 'pattern' .
rga --type pdf 'pattern' .
首先将您所有的pdf文件转换为文本文件:
for file in *.pdf;do pdftotext "$file"; done
然后grep
照常使用。这特别好,因为当您有多个查询和很多PDF文件时,它很快。
您需要诸如pdf2text之类的一些工具才能首先将pdf转换为文本文件,然后在文本内部进行搜索。(您可能会错过一些信息或符号)。
如果您使用的是编程语言,则可能为此目的编写了pdf库。例如http://search.cpan.org/dist/CAM-PDF/ for Perl