DiF*_*rag 3 grep find search pdf pdfgrep
我正在尝试找到保存在外部备份驱动器上的客户的 pdf 文件,其中包含超过 8000 个 pdf 文件和数百个文件夹。
例如,如果我想搜索驱动器 X: 上包含我的客户名称“Sequoia Group”的所有 pdf 文件,有哪些有用的命令行和/或工具来实现相关的输出结果?
我使用的是 MacOS High Sierra,带有 zsh,我还通过自制程序安装了 GNU grep、ack 和 pdfgrep。但是,我还没有找到该文件。
文件名未知,因为所有文件都保存为 PDF-Backup-0001、PDF-Backup-0002...等,
到目前为止,我使用了以下命令,但没有成功:
#grep -wirl "sequoia group" ./
#pdfgrep -iHncRZ "sequoia group"
#mdfind "sequoia group"
Run Code Online (Sandbox Code Playgroud)
另外,建议使用此命令行,但是,我不确定在哪里放置名称,因此我将 /path 替换为驱动器的路径,并将模式替换为“sequoia”,仍然没有找到任何匹配项
#find /path -iname '*.pdf' -exec pdfgrep pattern {} +
#find /Volumes/X Backup -iname '*.pdf' -exec pdfgrep "sequoia" {} +
Run Code Online (Sandbox Code Playgroud)
啊,这怎么这么熟悉啊……
在搜索目录的根目录中打开一个终端,然后
pdfgrep -ril "sequoia group" >matches 2>bad.files
Run Code Online (Sandbox Code Playgroud)
这将递归地-r
搜索所有 pdf 文件中的搜索词,不区分大小写-i
,并且仅返回文件名而不返回匹配的文本-l
。
所有匹配的文件名都将写入名为的文件中matches
,任何错误都将写入名为的文件中bad.files
。
您可以将其matches
复制到单独的目录以供参考。
while read f do; cp $f /wherever/I/want/$f; done < matches
Run Code Online (Sandbox Code Playgroud)
这bad.files
要么已损坏,要么 OCR 不正确,因此您应该将它们复制到另一个目录,重新处理它们并再次搜索它们。
如果您急于使用,find
因为您可能有等的变体pdf
,PDF
那么
find /search/root/ -iname *.pdf -exec pdfgrep -il "sequoia group" {} ';' >matches 2>bad.files
Run Code Online (Sandbox Code Playgroud)
您在上面要求对此进行解释...find
我认为您得到的命令pdfgrep
在上面进行了解释,重定向也是如此>
。
选项-exec
获取命令find
的输出find
并将其放在您看到的位置{}
。
最后-exec
你会看到我已经放了,;
而你已经放了+
。
+
导致-exec
收集所有输出find
并将其pdfgrep
作为一长串参数传递给并运行 pdfgrep 一次。除非文件数量超过最大数量,否则工作正常。
;
导致一次将 的-exec
输出提供find
给一个文件。pdfgrep
后记。打开一些 pdf 文件,无论您用什么方式查看它们,并确保它们已经过 OCR 并且实际上是可搜索的。
如果不是,您可能需要从每个目录运行它
find /path/to/dir/ -maxdepth 1 -type f -iname "*.pdf" -print0 | while IFS= read -r -d $'\0' line; do pdfsandwich -lang eng "$line"; done
Run Code Online (Sandbox Code Playgroud)
如果您可以让您的电脑专门处理所有 8,000 个文件,无论需要多长时间,那么只需删除-maxdepth 1
并find
指向您的搜索根目录即可。