[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Usar teste para, caso verdadeiro, gerar variável e rodar comandos que us
From: |
Helton Moraes |
Subject: |
Usar teste para, caso verdadeiro, gerar variável e rodar comandos que usam a variável |
Date: |
Mon, 18 Oct 2010 20:06:35 -0200 |
Caros colegas
Hoje criei um programinha pra facilitar minha vida de
procurador-de-coisas-em-um-monte-de-pdf. O programa procura recursivamente
todos os pdfs e dá uma saída formatada, usando o comando pdftotext do pacote
xpdf-utils.
Invocação(exemplo): $ grepdf empowerment
# 2009.pdf:
==========
Empowerment. University of California Press, Berkeley.8.
# Medicalisation of Disability.pdf:
==================================
political empowerment of disabled people as a group and not through
# Wheelchairs - from engineering to inclusive design - Include 2005.pdf:
=======================================================================
Personas, narratives and empowerment: the inclusive design of `away from
Empowerment games: participatory design exercises for sustainable public
Personas, narratives and empowerment: the inclusive design
Empowerment games: participatory design exercises for sustainable
Design process, Empowerment Games, designed through collaboration between
Não consegui enxugar alguns pontos, apesar de ter dado uma lida nos meus
amansa-burros:
1. Como evitar ter de escrever e ler o arquivo 'saida'?
2. Como aproveitar a passada // pdftotext -q -raw -nopgbrk "$arquivo" -
| grep -i "$1" // para, SOMENTE SE POSITIVA (exit status do grep = 0),
criar a variável $busca e rodar os outros comandos?
3. Alguma sugestão para o 'sublinhado-com-um-monte-de-sinais-de-igual'
que não seja usando laço?
4. Teria como fazer os termos de busca ficarem coloridos, como
aconteceria no grep 'limpo'?
5. Será que o pdftotext é o melhor programa para fazer isso? Haveria
algum modo nativo para melhorar a portabilidade?
Não que o comando não esteja funcionando satisfatoriamente (bem mais rápido
do que o mecanismo equivalente do Adobe Acrobat, na verdade), mas tenho
visto que a comunidade Shell Script valoriza a "elegância" e a eficiência da
coisa, e como estou aprendendo, não haveria oportunidade melhor para
aprender direito do que incorporar boas práticas. Também fiquei satisfeito
com o fato de o código ter ficado suficientemente legível.
Obrigado pela ajuda, espero que, independente de mais nada, o script possa
ser útil para mais gente.
Helton
==========================
#!/bin/bash
echo ""
find -type f -name '*.pdf' -print > saida
while read arquivo
do
busca=$(pdftotext -q -raw -nopgbrk "$arquivo" - | grep -i "$1")
if [ "$busca" ]
then
nome=$(echo "$arquivo" | sed -r 's:.*/([^/]*)$:\1:g')
count=$(echo "$nome" | wc -c)
linha=$(for n in $(seq 0 "$count"); do echo -n "="; done; echo -e
"\n")
echo -e "# $nome:\n$linha\n$busca\n\n"
fi
done < saida
==========================
[As partes desta mensagem que não continham texto foram removidas]
- Usar teste para, caso verdadeiro, gerar variável e rodar comandos que usam a variável,
Helton Moraes <=
- Re: [shell-script] Usar teste para, caso verdadeiro, gerar variável e rodar comandos que usam a variável, Eri Ramos Bastos, 2010/10/18
- Re: [shell-script] Usar teste para, caso verdadeiro, gerar variável e rodar comandos que usam a variável, Lawrence Waclawiak, 2010/10/18
- Re: [shell-script] Usar teste para, caso verdadeiro, gerar variável e rodar comandos que usam a variável, jimmy, 2010/10/18