我怎样才能在目录/子目录中搜索PDF文件的内容?我正在寻找一些命令行工具 . 似乎 grep 无法搜索PDF文件 .
grep
您需要一些工具,如pdf2text,首先将您的PDF转换为文本文件,然后在文本内搜索 . (您可能会遗漏一些信息或符号) .
如果您使用的是编程语言,可能会为此目的编写pdf库 . 例如http://search.cpan.org/dist/CAM-PDF/ for Perl
尝试在如上所述的简单脚本中使用'acroread'
有一个开源公共资源grep工具crgrep,它可以在PDF文件中搜索,也可以搜索其他资源,例如嵌套在存档,数据库表,图像元数据,POM文件依赖项和Web资源中的内容 - 以及这些资源的组合,包括递归搜索 .
“文件”选项卡下的完整描述几乎涵盖了该工具支持的内容 .
我开发了crgrep作为开源工具 .
首先将所有pdf文件转换为文本文件:
for file in *.pdf;do pdftotext "$file"; done
然后正常使用 grep . 这是特别好的,因为当您有多个查询和大量PDF文件时它很快 .
您的发行版应提供名为 pdftotext 的实用程序:
pdftotext
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
"-"是将pdftotext输出到stdout而不是文件的必要条件 . --with-filename 和 --label= 选项将文件名放在grep的输出中 . 可选的 --color 标志很好,告诉grep使用终端上的颜色输出 .
--with-filename
--label=
--color
(在Ubuntu中, pdftotext 由包 xpdf-utils 或 poppler-utils 提供 . )
xpdf-utils
poppler-utils
如果您想使用 pdfgrep 不支持的GNU grep 功能,则此方法使用 pdftotext 和 grep 优于 pdfgrep . Note :pdfgrep-1.3.x支持 -C 选项以打印上下文行 .
pdfgrep
-C
有pdfgrep,它正如它的名字所暗示的那样 .
pdfgrep -R 'a pattern to search recursively from path' /some/path
我用它进行简单搜索,效果很好 .
(Debian,Ubuntu和Fedora都有软件包 . )
从版本1.3.0 pdfgrep支持递归搜索 . 自Ubuntu 12.10(Quantal)以来,这个版本在Ubuntu中可用 .
Recoll是一个非常出色的Unix / Linux全文GUI搜索应用程序,支持许多不同的格式,包括PDF . 它甚至可以将查询的确切页码和搜索项传递给文档查看器,从而允许您直接从其GUI跳转到结果 .
Recoll还带有可行的命令行界面和web-browser interface .
我的pdfgrep(1.3.0)的实际版本允许以下内容:
pdfgrep -HiR 'pattern' /path
在做 pdfgrep --help 时:
pdfgrep --help
H:打印每场比赛的文件名 .
i:忽略案件区别 .
R:递归搜索目录 .
它在我的Ubuntu上运行良好 .
我做了这个 destructive 小脚本 . 玩得开心 .
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 }
我有同样的问题,因此我写了一个脚本,搜索指定文件夹中的所有pdf文件的字符串,并打印与查询字符串匹配的PDF文件 .
也许这会对你有所帮助 .
你可以下载here
如果要使用 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"
12 回答
您需要一些工具,如pdf2text,首先将您的PDF转换为文本文件,然后在文本内搜索 . (您可能会遗漏一些信息或符号) .
如果您使用的是编程语言,可能会为此目的编写pdf库 . 例如http://search.cpan.org/dist/CAM-PDF/ for Perl
尝试在如上所述的简单脚本中使用'acroread'
有一个开源公共资源grep工具crgrep,它可以在PDF文件中搜索,也可以搜索其他资源,例如嵌套在存档,数据库表,图像元数据,POM文件依赖项和Web资源中的内容 - 以及这些资源的组合,包括递归搜索 .
“文件”选项卡下的完整描述几乎涵盖了该工具支持的内容 .
我开发了crgrep作为开源工具 .
首先将所有pdf文件转换为文本文件:
然后正常使用
grep
. 这是特别好的,因为当您有多个查询和大量PDF文件时它很快 .您的发行版应提供名为
pdftotext
的实用程序:"-"是将pdftotext输出到stdout而不是文件的必要条件 .
--with-filename
和--label=
选项将文件名放在grep的输出中 . 可选的--color
标志很好,告诉grep使用终端上的颜色输出 .(在Ubuntu中,
pdftotext
由包xpdf-utils
或poppler-utils
提供 . )如果您想使用
pdfgrep
不支持的GNUgrep
功能,则此方法使用pdftotext
和grep
优于pdfgrep
. Note :pdfgrep-1.3.x支持-C
选项以打印上下文行 .有pdfgrep,它正如它的名字所暗示的那样 .
我用它进行简单搜索,效果很好 .
(Debian,Ubuntu和Fedora都有软件包 . )
从版本1.3.0 pdfgrep支持递归搜索 . 自Ubuntu 12.10(Quantal)以来,这个版本在Ubuntu中可用 .
Recoll是一个非常出色的Unix / Linux全文GUI搜索应用程序,支持许多不同的格式,包括PDF . 它甚至可以将查询的确切页码和搜索项传递给文档查看器,从而允许您直接从其GUI跳转到结果 .
Recoll还带有可行的命令行界面和web-browser interface .
我的pdfgrep(1.3.0)的实际版本允许以下内容:
在做
pdfgrep --help
时:H:打印每场比赛的文件名 .
i:忽略案件区别 .
R:递归搜索目录 .
它在我的Ubuntu上运行良好 .
我做了这个 destructive 小脚本 . 玩得开心 .
我有同样的问题,因此我写了一个脚本,搜索指定文件夹中的所有pdf文件的字符串,并打印与查询字符串匹配的PDF文件 .
也许这会对你有所帮助 .
你可以下载here
如果要使用 pdftotext 查看文件名,请使用以下命令:
我喜欢@ sjr的答案,但我更喜欢xargs vs -exec . 我发现xargs更加通用 . 例如,使用-P,我们可以在有意义的情况下利用多个CPU .