如何输出同时包含多个关键词的PDF文件名称?
如何用pdfgrep筛选同时包含多个关键词的PDF文件
要找出目录中同时包含多个关键词(比如foo和bar)的PDF文件,最可靠的方式是分两次调用pdfgrep做递进筛选,或者用shell循环逐一验证,以下是具体方案:
方案1:用管道+ xargs 递进筛选
直接通过两次pdfgrep叠加,先筛选出含第一个关键词的文件,再在这些文件里找含第二个关键词的:
pdfgrep -il "foo" *.pdf | xargs pdfgrep -il "bar"
参数说明:
-i:忽略大小写匹配-l:仅输出匹配到的文件名,不显示具体匹配内容
方案2:用Shell循环逐一验证
如果更习惯用循环逻辑,可以遍历每个PDF文件,分别检查两个关键词是否都存在:
for file in *.pdf; do # -q 静默模式,只返回匹配状态,不输出内容,提升效率 if pdfgrep -qi "foo" "$file" && pdfgrep -qi "bar" "$file"; then echo "$file" fi done
为什么你之前的方法失效?
- 第一个命令
pdfgrep --files-with-matches --ignore-case --with-filename --max-count 1 "(foo|bar)" -- *.pdf用了(foo|bar)正则,这是OR逻辑,只要文件含任一关键词就会被匹配,不符合“同时包含”的要求。 - 第二个用前瞻断言的命令,虽然启用了单行模式
(?s),但pdfgrep处理PDF时,不同页面的文本可能被分割成独立的扫描块,导致跨页面的关键词无法被正则同时捕获,所以无法匹配关键词在不同页面的文件。
内容的提问来源于stack exchange,提问作者mofojed
相关产品推荐
相关产品推荐

