Como posso executar um grep em arquivos epub / mobi?

3

Existe uma maneira de fazer isso, particularmente em um conjunto de vários arquivos epub / mobi em um diretório?

    
por InquilineKea 01.05.2014 / 18:51

5 respostas

6

Você pode facilmente usar esses arquivos fornecendo a opção -a para interpretar os arquivos como ascii:

grep -a "author" *.epub *.mobi

O acima funciona em todos os meus arquivos 1000 EPUB e MOBI, dando os resultados esperados.

EPUB e MOBI são ambos formatos de contêiner. O EPUB é essencialmente um arquivo .zip com alguns requisitos estruturais, o MOBI é um arquivo no formato Palm Database. Ambos os formatos permitem que dados compactados ou descompactados sejam colocados nos contêineres.

Se os dados que você está procurando estiverem em um "arquivo" no contêiner, e esse arquivo é compactado, você precisará fornecer a string compactada e não a versão expandida e descompactada da string. Em particular, se você estiver lendo um EPUB / MOBI em um leitor de e-book, você geralmente não encontrará uma palavra 'abcde' que acabou de ler usando grep -a 'abcde' em todos os arquivos EPUB e MOBI, pois o conteúdo do livro é Provavelmente (mas não necessariamente, é apenas uma medida de eficiência) em "arquivos" compactados no contêiner.

Este não é um problema de grep ser incapaz de pesquisar nesses arquivos, mas de você não fornecer a string de pesquisa correta. O mesmo aconteceria se você lesse um arquivo com texto em japonês usando algum software de tradução do japonês para o inglês e esperasse encontrar as palavras em inglês usando o arquivo original. Com -a e os padrões de palavras japoneses (binários) corretos, grep funcionaria muito bem.

    
por 02.05.2014 / 08:28
1

O formato epub é um arquivo binário compactado, portanto, você deve descompactá-lo antes de tentar analisar o texto. O formato MOBI também não parece ser um texto simples, então, não, eu diria que arquivos epub e mobi não podem ser capturados, pois não são arquivos de texto simples. Use calibre ou outro leitor que permita pesquisas no arquivo.

    
por 01.05.2014 / 19:16
1

Para pesquisar um arquivo compactado, você pode usar o zgrep. Isso deve funcionar para epub, pois é um arquivo compactado. Veja algumas informações adicionais sobre o zgrep: link

    
por 01.05.2014 / 19:25
1

Isso funcionou no windows7 + cygwin; pesquisar texto dentro dos arquivos zip.

c:\> zipgrep "regex" file.epub    

script de shell em c: / cygwin / bin / zipgrep, e isso também funciona:

c:\> unzip -p "*.epub" | grep -a --color regex

-p é para pipe.

script grep-epub.sh

PAT=${1:?"Usage: grep-epub PAT *.epub files to grep"}
shift
: ${1:?"Need epub files to grep"}
for i in $* ;do
  echo $0 $i
  unzip -p $i "*.htm*" "*.xml" "*.opf" |  # unzip only html and content files to stdin
    perl -lpe 's![<][^>]{1,200}?[>]!!g;' | # get rid of small html <b>tags
    grep -Pinaso  ".{0,60}$PAT.{0,60}" | # keep some context around matches
    grep -Pi --color "$PAT"              # color the matches.
done 
    
por 29.08.2017 / 18:35
0

Pode-se combinar respostas anteriores com find:

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

Dessa maneira, é possível pesquisar em uma árvore de diretórios, evitando que todos os arquivos estejam no mesmo nível de diretório.

    
por 10.01.2018 / 20:34

Tags