Recursivamente grep através de arquivos epub

2

Eu tentei as respostas aqui , mas sem sorte.

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

me mostrou "correspondido", mas não me forneceu o arquivo epub correspondente. Além disso, ele retornou enormes quantidades de dados, que eram difíceis de passar.

grep -a não funcionou de todo.

Eu quero algo como grep -R , mas para arquivos epub.

    
por JJ Abrams 28.06.2018 / 17:47

2 respostas

1

Isso lhe dará o caminho completo para todos os arquivos * .epub.

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

Se você quiser armazenar essa saída em uma lista:

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

Se você quiser procurar por uma string nessa lista, eu usaria um loop for. Se você está obtendo grandes quantidades de dados, pode vê-los como uma linha longa. isto irá imprimir o padrão e os 5 caracteres antes e depois.

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

Eu usaria:

find . -name '*.epub'  -exec zipgrep -q {pattern} {} \; -print
  • -q suprime a exibição de ocorrências
  • desde que zipgrep retorne 0 somente se encontrar uma correspondência, o -exec zipgrep ... atuará como um filtro, portanto, o -print será executado apenas se houver uma correspondência (caso você precise, pode ser outra -exec que só será executado nos arquivos correspondentes).
por 28.06.2018 / 19:37