在大量pdf文件中搜索短语的命令行工具

ice*_*man 10 search grep windows-search

我正在使用 Opensuse 10.3 并且想知道命令行工具在目录内的大量 pdf 文件中搜索短语。在 Windows XP 中,资源管理器搜索允许这样做,但速度太慢。这里有 grep 提示吗?

小智 6

SEARCH_DIR="/some/dir/where/you/want/to/search/";
SEARCH_STRING="无论你在搜索什么";
# 从pdf中提取文本
pdftotext "file.pdf" "file.txt"

# 连接grep
pdftotext "file.pdf" /dev/stdout |grep -H --label="file.pdf" -- "$SEARCH_STRING"

# 如果你想让grep只显示匹配pdf文件的文件列表,添加--files-with-matches
pdftotext "file.pdf" /dev/stdout |grep -H --label="file.pdf" --files-with-matches -- "$SEARCH_STRING"

# 找到要搜索的可能的pdf列表
find "$SEARCH_DIR" -type f -name '*.pdf' > list-of-pdf.txt
# awk 连接的所有东西作为胶带,发送到 bash 进行处理
# 双引号在 awk 中被转义为 x22。
find "$SEARCH_DIR" -type f -name '*.pdf' |awk -v SEARCH_STRING="$SEARCH_STRING" '{
打印 "pdftotext \x22"$0"\x22 /dev/stdout | grep -H --label=\x22"$0"\x22 -- \x22"SEARCH_STRING"\x22"
}' |bash

# 没有 bash。满足您需求的进一步流程
find "$SEARCH_DIR" -type f -name '*.pdf' |awk -v SEARCH_STRING="$SEARCH_STRING" '
{
EXEC="pdftotext \x22"$0"\x22 /dev/stdout | grep -H --label=\x22"$0"\x22 -- \x22"SEARCH_STRING"\x22";
while(EXEC|getline ret){
 打印 "对于文件 ["$0"] 我们有匹配 ["ret"]";
 #做你喜欢做的事。 
};
关闭(执行);
}'


Gil*_*il' 4

在 Linux 和 Windows 下,您都可以使用 Acrobat Reader,它具有搜索多个文件的命令。

在 Linux 下,有 Recoll,它会在您第一次运行它时为您的 pdf 文件(以及更多文件)建立索引。索引建立后,单词搜索应该很快;短语搜索应该是合理的。pdftotext启动 Recoll 之前请确保该命令已安装;在Debian和Ubuntu下,它在poppler-utils软件包中,我不知道Suse。

或者您可以直接将文件转换为文本,并使用以下命令在文本文件上使用 grep。

find -name '*.pdf' -exec pdftotext {} \;
grep -r --include '*.txt' -l -F "要搜索的确切短语"
grep -r --include '*.txt' -l -E "要搜索的正则表达式"