Estou usando o Opensuse 10.3 e gostaria de conhecer ferramentas de linha de comando para pesquisar frases em um grande número de arquivos pdf dentro de um diretório. No Windows XP, a pesquisa do Explorer permite isso, mas é muito lenta. Há dicas grep aqui?
search
grep
windows-search
homem do gelo
fonte
fonte
Respostas:
fonte
No Linux e no Windows, você pode usar o Acrobat Reader, que possui um comando para pesquisar vários arquivos.
No Linux, existe o Recoll, que cria um índice dos seus arquivos pdf (e mais) na primeira vez em que você o executa. Após a criação do índice, as pesquisas por palavras devem ser muito rápidas; pesquisas de frases devem ser razoáveis. Verifique se o
pdftotext
comando está instalado antes de iniciar o Recoll; no Debian e Ubuntu, está nopoppler-utils
pacote, não sei sobre o Suse.Ou você pode converter diretamente os arquivos em texto e usar grep nos arquivos de texto com os comandos abaixo.
fonte
pdftotext
(que ferramentas como Recoll farão automaticamente).Adobe Reader X faz o trabalho e faz permitir a pesquisa em um diretório inteiro e subdiretórios, não só dentro de um arquivo, mas não é um programa de linha de comando.
fonte
recoll
instalado no debian facilmente, agora tentando torná-lo utilizável para meus funcionários baseados no Windows.Para listar recursivamente todos os arquivos no diretório inicial que possuem a extensão de arquivo PDF e que contêm uma linha que corresponde à regex '
[iI]n Haskell
', por exemplo, você pode emitir:Observações:
-exec
ouxargs
porque, por razões de segurança , acho que é uma boa prática adquirir o hábito de fazê-lo. Alterar '-execdir
' para '-exec
' e '$PWD${0#?}
' para '$0
' deve atingir o mesmo resultado neste caso../
'). Neste exemplo, os caminhos comparados são todos absolutos (ou seja, começam com '/
') porque '~/
' é expandido para o caminho absoluto do diretório inicial do usuário atual e é o único argumento do caminho.$0
' e '$1
' são parâmetros posicionais usados de forma a citar corretamente os argumentos. Se isso não for feito corretamente, o comando estará vulnerável a nomes de arquivos arbitrários.${0#?}
' retira o primeiro caractere de$0
, ou seja, o '.
'.Para imprimir cada linha correspondente prosseguida pelo nome do arquivo:
Essa variante usa '
-H
' em vez de '-l
' e rotula com nome de arquivo em vez de caminho de arquivo. '${0:2}
' retira os dois primeiros caracteres de$0
, ou seja, o './
', mas aparentemente não é reconhecido porsh
.Obviamente, ajuste suas necessidades.
fonte