如果使用 FreeBSD 作为 Windows 客户端的文件服务器,那么能够在服务器端而不是客户端运行文件搜索会很有用。
一个典型的示例可能是:查找满足某些元数据标准(名称、路径、大小、日期等)的所有文件,并在其文本提取内容中包含一些文字或正则表达式。搜索跨越包含混合文件的大型递归目录,内容命中可能位于以下任意一个(或多个)中:.txt 注释、.docx/.xlsx 文档、.pdf、.zip/.rar/.tgz/。 iso 压缩档案,或者失败,甚至可能是二进制文件中的字符串。
第一部分很简单,只需使用find
.在一种类型的文件中搜索也不难。但是 FreeBSD 没有“众所周知的”文件过滤器的概念,也没有用于将文件数据解析为文本的特定单个 API,该 API 使用可插入过滤器将其转换为通用格式(尽管对于许多单独的文件类型有众所周知的文本提取过滤器,例如pdf、doc/docx、xls/xlsx、存档格式、sqlite 数据库、包含字符串的二进制文件等),因此您不能在结果中普遍使用grep
、find -exec
、pdftotext
或使用 Microsoft XML 提取代码。unzip | sed
我想您必须使用 生成文件名列表或流find
,然后根据扩展名或将每个文件名通过适当的过滤器file
,并收集通过的所有内容作为输出。
如果我需要在大型文件存储中经常进行这种内容搜索,是否有专门设计且更有效的特定工具,或者最有效的方法是什么?
更新 -我只感兴趣直接逐个文件 CLI 搜索。我是不是对索引内容以及随后搜索索引甚至有一点兴趣。这个问题与逐个文件的现场文字/正则表达式搜索相关,与 一样find
,但是当内容也被搜索并且不是纯文本而是具有不同文本提取过滤器的多种文件类型时。所以就是不是有关索引内容搜索的现有问题的重复。抱歉,之前不清楚,我没有意识到其中的含糊之处。