如何在目录/子目录中搜索PDF文件的内容?我在找一些命令行工具。grep似乎不能搜索PDF文件。
当前回答
还有pdfgrep,它做的正是它的名字所暗示的。
pdfgrep -R 'a pattern to search recursively from path' /some/path
我用它做过简单的搜索,效果很好。
(Debian、Ubuntu和Fedora中都有软件包。)
从1.3.0版本开始,pdfgrep支持递归搜索。这个版本从Ubuntu 12.10 (Quantal)开始在Ubuntu中可用。
其他回答
我的实际版本的pdfgrep(1.3.0)允许以下:
pdfgrep -HiR 'pattern' /path
当执行pdfgrep——help时:
H:打印每个匹配项的文件名。 i:忽略大小写区别。 R:递归搜索目录。
它在我的Ubuntu上运行得很好。
我喜欢@sjr的答案,但我更喜欢xargs vs -exec。我发现xargs更通用。例如,使用-P,我们可以在必要时利用多个cpu。
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
我写了这个破坏性的小脚本。祝你玩得开心。
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
}
还有另一个实用程序叫做ripgrep-all,它是基于ripgrep的。
它不仅可以处理PDF文档,比如Office文档和电影,而且作者声称它比pdfgrep更快。
递归搜索当前目录的命令语法,第二个命令只限制PDF文件:
rga 'pattern' .
rga --type pdf 'pattern' .
首先将所有pdf文件转换为文本文件:
for file in *.pdf;do pdftotext "$file"; done
然后像往常一样使用grep。这是特别好的,因为当您有多个查询和许多PDF文件时,它是快速的。
推荐文章
- 在Bash中检查变量是否存在于列表中
- 查看PS命令的全部输出
- 在Windows中有像GREP这样的模式匹配实用程序吗?
- 如何从命令行将每两行合并为一行?
- Linux命令将域名转换为IP
- 强制打开“另存为…”弹出打开文本链接点击PDF在HTML
- 如何从命令行在windows中找到mysql数据目录
- 匹配前后的Grep字符?
- (grep)正则表达式匹配非ascii字符?
- 有效地测试Linux上的端口是否打开?
- 如何从另一个文件A中删除文件B中出现的行?
- 对以制表符分隔的文件进行排序
- 使用sudo时未找到命令
- 当有命令行参数时,如何使用GDB分析程序的核心转储文件?
- 如何强制从另一个SSH会话分离屏幕?