Como recursivamente encontrar um arquivo .doc que contenha uma palavra específica?

7

Estou usando o bash no Ubuntu.

Atualmente, isso funciona bem no diretório atual:

catdoc *.doc | grep "specificword" 

Mas tenho muitos subdiretórios com arquivos .doc.

Como posso pesquisar, digamos, "specificword" recursivamente?

    
por Tom 31.08.2011 / 13:57

3 respostas

9

Use find para pesquisas recursivas:

find -name '*.doc' -exec catdoc {} + | grep "specificword"

Isso também mostrará o nome do arquivo:

find -name '*.doc' | while read -r file; do
    catdoc "$file" | grep -H --label="$file" "specificword"
done

(Normalmente eu usaria find ... -print0 | while read -rd "" file , mas talvez haja uma chance de 0,0001% de que seria necessário, então parei de me importar.)

    
por 31.08.2011 / 14:02
5

Você pode querer olhar para recoll que é uma ferramenta de pesquisa de texto completo para sistemas Linux e Unix que suportam muitos documentos diferentes formatos. No entanto, ele é baseado em índice, ou seja, ele deve indexar os documentos que você deseja pesquisar antes da pesquisa real. (Obrigado a pabouk por apontar isso).

Existe uma GUI e uma linha de comando também.

Consulte a documentação para mais informações.

    
por 17.12.2013 / 08:22
1

O Grep deve encontrar correspondências binárias com:

find /path/to/dir -name '*.doc' exec grep -l "specificword" {} \;
    
por 01.09.2011 / 04:06