Como eu poderia pesquisar o conteúdo dos arquivos PDF em um diretório / subdiretório? Estou procurando algumas ferramentas de linha de comando. Parece que grepnão é possível pesquisar arquivos PDF.
Como eu poderia pesquisar o conteúdo dos arquivos PDF em um diretório / subdiretório? Estou procurando algumas ferramentas de linha de comando. Parece que grepnão é possível pesquisar arquivos PDF.
Respostas:
Sua distribuição deve fornecer um utilitário chamado pdftotext:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
O "-" é necessário para a saída do pdftotext para o stdout, não para os arquivos. As opções --with-filenamee --label=colocarão o nome do arquivo na saída do grep. O --colorsinalizador opcional é bom e informa ao grep para saída usando cores no terminal.
(No Ubuntu, pdftotexté fornecido pelo pacote xpdf-utilsou poppler-utils.)
Este método, using pdftotexte grep, tem uma vantagem sobre pdfgrepse você deseja usar recursos do GNU grepque pdfgrepnão suportam. Nota : O pdfgrep-1.3.x suporta a -Copção de impressão de linha de contexto.
grepfiltra os nomes dos arquivos impressos.
pdfgrepsolução seja boa para pesquisas muito rápidas e simples, muitas vezes eu quero ter algum contexto, pois uma única linha não será útil o suficiente - então, como eu adicionei a esta resposta: Por exemplo, você pode adicionar a opção C5 antes "o seu padrão" para incluir 5 linhas de contexto para a saída - pdfgrep não suporta esta
pdfgrepé inútil, ele relata uma quantidade enorme de lixo em arquivos que não pode manipular. Sua solução, por outro lado, ajudou. Então, por favor, não exclua-o, mesmo após 3 anos, ainda é útil!
Existe o pdfgrep , que faz exatamente o que o nome sugere.
pdfgrep -R 'a pattern to search recursively from path' /some/path
Eu usei-o para pesquisas simples e funcionou bem.
(Existem pacotes no Debian, Ubuntu e Fedora.)
Desde a versão 1.3.0, o pdfgrep suporta pesquisa recursiva. Esta versão está disponível no Ubuntu desde o Ubuntu 12.10 (Quantal).
pdfgrepagora tem essa opção de recursão, incluindo -Rtambém seguir links simbólicos #
Recoll é um fantástico aplicativo de pesquisa de GUI de texto completo para Unix / Linux que suporta dezenas de formatos diferentes, incluindo PDF. Ele pode até passar o número exato da página e o termo de pesquisa de uma consulta para o visualizador de documentos e, assim, permite que você pule para o resultado diretamente de sua GUI.
O Recoll também vem com uma interface de linha de comando viável e uma interface de navegador da web .
recoll / xapianna linha de comando (não GUI)? Obrigado!
recoll manual do usuário pode conter algumas indicações, mas oferece uma bastante técnica e "off-topic" ler ...
pwdext: pdf 'neuro *' - stackoverflow comeu os backticks em torno do pwd.
Minha versão atual do pdfgrep (1.3.0) permite o seguinte:
pdfgrep -HiR 'pattern' /path
Ao fazer pdfgrep --help:
Funciona bem no meu Ubuntu.
Eu fiz esse pequeno script destrutivo . Divirta-se com isso.
function pdfsearch()
{
find . -iname '*.pdf' | while read filename
do
#echo -e "\033[34;1m// === PDF Document:\033[33;1m $filename\033[0m"
pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
# remove it! rm -f "$filename."
done
}
$filename.você, você deve inseri-lo grep.
Eu gosto da resposta do @ sjr, no entanto, prefiro xargs vs -exec. Acho xargs mais versátil. Por exemplo, com -P, podemos tirar proveito de várias CPUs quando faz sentido.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs'capacidade de processamento paralelo. Observe que seu --labelargumento de opção será literalmente {} , porque o grepcomando agora não é mais executado no contexto de find's exec.
Eu tive o mesmo problema e, portanto, escrevi um script que procura uma string em todos os arquivos pdf da pasta especificada e imprime os arquivos PDF correspondentes à string de consulta.
Talvez isso seja útil para você.
Você pode baixá-lo aqui
pdfgrepsolução ou o one-liner do sjr, e me deixou com um processo contínuo usando 100% de um thread da CPU, mesmo depois de eu ter pressionado Ctrl-C para finalizá-lo.
Se você deseja ver os nomes de arquivo com pdftotext, use o seguinte comando:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
Há outro utilitário chamado ripgrep-all , que é baseado no ripgrep .
Ele pode lidar com mais do que apenas documentos PDF, como documentos e filmes do Office, e o autor afirma que é mais rápido que pdfgrep.
Sintaxe de comando para pesquisar recursivamente o diretório atual, e o segundo limita apenas aos arquivos PDF:
rga 'pattern' .
rga --type pdf 'pattern' .
Há um recurso comum ferramenta grep open source crgrep que pesquisas em arquivos PDF, mas também outros recursos como conteúdo aninhado em arquivos, tabelas de banco de dados, imagem meta-dados, dependências do arquivo POM e os recursos da web - e combinações destes incluindo a busca recursiva.
A descrição completa na guia Arquivos praticamente cobre o que a ferramenta suporta.
Eu desenvolvi o crgrep como uma ferramenta de código-fonte aberto.
Primeiro converta todos os seus arquivos PDF em arquivos de texto:
for file in *.pdf;do pdftotext "$file"; done
Então use grepcomo normal. Isso é especialmente bom, pois é rápido quando você tem várias consultas e muitos arquivos PDF.
ag github.com/ggreer/the_silver_searcher . Capaz de analisar em Gb psicodélicos por microssegundos. Arquivos simples para toda a vida
Você precisa de algumas ferramentas, como pdf2text, para primeiro converter seu pdf em um arquivo de texto e depois pesquisar dentro do texto. (Você provavelmente perderá algumas informações ou símbolos).
Se você estiver usando uma linguagem de programação, provavelmente existem bibliotecas de pdf escritas para esse fim. por exemplo, http://search.cpan.org/dist/CAM-PDF/ para Perl