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 grep
nã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 grep
nã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-filename
e --label=
colocarão o nome do arquivo na saída do grep. O --color
sinalizador opcional é bom e informa ao grep para saída usando cores no terminal.
(No Ubuntu, pdftotext
é fornecido pelo pacote xpdf-utils
ou poppler-utils
.)
Este método, using pdftotext
e grep
, tem uma vantagem sobre pdfgrep
se você deseja usar recursos do GNU grep
que pdfgrep
não suportam. Nota : O pdfgrep-1.3.x suporta a -C
opção de impressão de linha de contexto.
grep
filtra os nomes dos arquivos impressos.
pdfgrep
soluçã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).
pdfgrep
agora tem essa opção de recursão, incluindo -R
també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 / xapian
na 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 ...
pwd
ext: 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 --label
argumento de opção será literalmente {}
, porque o grep
comando 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
pdfgrep
soluçã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 grep
como 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