我尝试了答案这里,但没有运气。
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
仅在匹配文件上执行的)。