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.
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.
@Kurt Pfeifle A edição "(Editar por -kp-)" que você fez não funciona, pois grepfiltra os nomes dos arquivos impressos.
Raphael Ahrens
@sjr não, embora a 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
Colin D Bennett
oh isso é legal, feliz em saber que existem vantagens para isso, embora seja muito menos óbvio para a maioria das pessoas wtf que está fazendo
SJR
2
@sjr Apenas para constar: estou usando o Ubuntu 12.10 e 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!
Ali
Eu era capaz de usá-lo também no cygwin, apesar de torná-lo uma função com o parâmetro Eu tive que fazer o "your_pattern" tornar-se '$ 1'
Koshmaar
215
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).
O @pavon pdfgrepagora tem essa opção de recursão, incluindo -Rtambém seguir links simbólicos #
Tobias Kienzler
30
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.
@ Glutanimate Ajudaria (eu e possivelmente outros também) se você pudesse adicionar um exemplo referente à pergunta original (ferramenta de linha de comando para pesquisa de vários PDFs): Eu também gostaria de ver como realizar uma pesquisa curinga e como pesquisar o diretório atual, incluindo todos os subdiretórios . Como isso ficaria recoll / xapianna linha de comando (não GUI)? Obrigado!
noz sobre natty
@ LeszekŻarna Talvez você possa postar o exemplo que testou?
Noz sobre natty
O recollmanual do usuário pode conter algumas indicações, mas oferece uma bastante técnica e "off-topic" ler ...
noz sobre natty
1
@nutty: recoll -t -q dir: pwdext: pdf 'neuro *' - stackoverflow comeu os backticks em torno do pwd.
medoc
13
Minha versão atual do pdfgrep (1.3.0) permite o seguinte:
pdfgrep -HiR 'pattern' /path
Ao fazer pdfgrep --help:
H: Imprima o nome do arquivo para cada correspondência.
i: Ignore as distinções de maiúsculas e minúsculas.
+1. Mas, em vez de $filename.você, você deve inseri-lo grep.
Raphael Ahrens
3
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.
ponto interessante sobre 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.
usar o seguinte comando
2
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.
Eu tentei o seu script e ele ficou muito mais lento que a 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.
Jason
2
Se você deseja ver os nomes de arquivo com pdftotext, use o seguinte comando:
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.
Craig - você tem alguma conexão com esse projeto? Nesse caso, você deve indicá-lo em sua resposta. Digo isto porque você acabou de enviar uma resposta virtualmente idêntico a duas outras questões velhos ...
Stephen C
Pós atualizado para esclarecer que eu sou o autor de crgrep
Craig
1
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.
Isso, quando feito em combinação com aggithub.com/ggreer/the_silver_searcher . Capaz de analisar em Gb psicodélicos por microssegundos. Arquivos simples para toda a vida
NVRM 10/0318
0
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
Respostas:
Sua distribuição deve fornecer um utilitário chamado
pdftotext
: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 pacotexpdf-utils
oupoppler-utils
.)Este método, using
pdftotext
egrep
, tem uma vantagem sobrepdfgrep
se você deseja usar recursos do GNUgrep
quepdfgrep
não suportam. Nota : O pdfgrep-1.3.x suporta a-C
opção de impressão de linha de contexto.fonte
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 estapdfgrep
é 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.
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).
fonte
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 .
fonte
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:
Ao fazer
pdfgrep --help
:Funciona bem no meu Ubuntu.
fonte
Eu fiz esse pequeno script destrutivo . Divirta-se com isso.
fonte
$filename.
você, você deve inseri-logrep
.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.
fonte
xargs
'capacidade de processamento paralelo. Observe que seu--label
argumento de opção será literalmente{}
, porque ogrep
comando agora não é mais executado no contexto defind
'sexec
.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
fonte
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:
fonte
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:
fonte
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.
fonte
Primeiro converta todos os seus arquivos PDF em arquivos de texto:
Então use
grep
como normal. Isso é especialmente bom, pois é rápido quando você tem várias consultas e muitos arquivos PDF.fonte
ag
github.com/ggreer/the_silver_searcher . Capaz de analisar em Gb psicodélicos por microssegundos. Arquivos simples para toda a vidaVocê 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
fonte
tente usar 'acroread' em um script simples como o descrito acima
fonte