![在一组 pdf 文件中查找单词或一组单词](https://linux22.com/image/182520/%E5%9C%A8%E4%B8%80%E7%BB%84%20pdf%20%E6%96%87%E4%BB%B6%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%8D%95%E8%AF%8D%E6%88%96%E4%B8%80%E7%BB%84%E5%8D%95%E8%AF%8D.png)
假设我有一个目录Note_De_cours
包含其他8个目录,即
Semaine_1 Semaine_3 Semaine_5 Semaine_7
Semaine_2 Semaine_4 Semaine_6 Semaine_8
每个目录都包含一些 pdf 文件。是否有命令行可以同时在每个 pdf 中搜索一个单词或一组单词。打开pdf,按下Ctrl + f
并搜索单词,这很烦人。我想过使用grep
,但我真的不是专家。也许还有其他一些最优化的方法可以做到这一点。
我想留下来Note_De_Cours
并申请pdfgrep
同时查看所有 pdf 文件。我希望命令告诉我哪个文件包含我想要的单词或单词集。我怎样才能做到这一点?
编辑
我可以循环执行这个命令:find elem -iname '*.pdf' -exec pdfgrep "baysien optimal" {} +
onelem
吗?就像是for elem in ...; do find elem -iname '*.pdf' -exec pdfgrep "baysien optimal" {} +
我已经完成了for i in 1 2 3 4 5 6 7 8; do find Semaine_$i -iname '*.pdf' -exec pdfgrep "taux" {} +; done
,但它没有输出它来自的文件
答案1
代替
for i in 1 2 3 4 5 6 7 8; do find Semaine_$i -iname '*.pdf' -exec pdfgrep "taux" {} +; done
如果要打印文件的名称,请在 find 上使用 -print (在匹配项后打印名称)或在 grep 上使用 -l (打印名称而不是匹配项):
find Semaine_[1-8] -iname '*.pdf' -exec pdfgrep "taux" {} \; -print
或者
find Semaine_[1-8] -iname '*.pdf' -exec pdfgrep -l "taux" {} \;
此外,pdfgrep
通过标志具有内置的递归功能-r
,因此您可以简单地执行以下操作:
pdfgrep -r -l "taux" Semaine_[1-8]
答案2
直接使用 grep 命令不会得到结果。因为linux最小包中包含的应用程序只能处理vi和nano可以读取的文件。 (grep、awk 等)对于 PDF 等特殊文件格式,有许多工具和替代品。通过安装 Dspace 等开源归档软件,您可以在浏览器中搜索和编目所有 PDF。通过添加模块,可以加强PDF操作。或者,您可以使用基于命令行的应用程序将 PDF 文件转换为纯文本文件,例如 pdftotext。 pdftotext 的搜索命令示例:
pdftotext /file/semaine.pdf - | grep -n -i "Semaine"
-n:打印行号。 -我:不区分大小写字母。
wc -l
通过在命令末尾添加,您可以查出您要查找的术语出现了多少次。
您可以使用在管道之后添加的 awk 和导数参数获得更有效的结果。
正如我上面提到的,方法不止一种。我可以建议这两种不同的选择。