递归地 grep 遍历 epub 文件

递归地 grep 遍历 epub 文件

我尝试了答案这里,但没有运气。

find . -name "*.epub" -exec zipgrep pattern {} \;

显示“匹配”,但没有给我返回匹配的 epub 文件。此外,它还返回了大量数据,很难进行查询。

grep -a根本没用。

我想要类似grep -R但对于 epub 文件的东西。

答案1

这将为您提供所有 *.epub 文件的完整路径。

find / -name *.epub -exec ls {} \; 2>/dev/null

如果您想将该输出存储在列表中:

find / -name *.epub -exec ls {} \; 2>/dev/null >> /tmp/list

如果您想在该列表中搜索字符串,我将使用 for 循环。如果您获得大量数据,它可能会将它们视为一长行。这将打印模式和前后 5 个字符。

for i in `cat /tmp/list` ; do echo $i ; grep -a -o -p '.{0,5}pattern.{0,5}' ; done

答案2

我会用:

find . -name '*.epub'  -exec zipgrep -q {pattern} {} \; -print
  • -q抑制命中的显示
  • 因为zipgrep仅当找到匹配时才返回 0,因此-exec zipgrep ...充当过滤器,因此-print仅在存在匹配时才执行(如果您需要它,它可以是另一个-exec仅在匹配文件上执行的)。

相关内容