Changelog: Alterações:
- Utilização do find para procurar por arquivos.
- Verifica se existe algum arquivo no diretório.
- Verificar se o arquivo contém a palavra que buscamos.
- Contador para achados e não achados.
- Mudança na fonte no final.
#!/bin/bash
echo 'Este script procura por palavras dentro de arquivos!!!'
echo 'Limpando a tela...'
sleep 2
clear
echo '<Entre> com as palavras que você deseja localizar:'
read PALAVRA
echo 'Dependendo da quantidade de combinações encontradas, a lista será mostrada'
echo 'paginada. Para navegar utilize a tecla {q} e para abortar {[ctrl_c]q}'
echo '---------------------------------------------------------------------'
echo 'Para agilizar a busca, <entre> com um Diretório [NÃO use asterisco]...'
read DIRETORIO
if [ ! -d $DIRETORIO ]; then
echo 'Este diretório não existe. Por favor, refaça a busca...'
exit
fi
grep -i $PALAVRA $DIRETORIO/* | less
grep -i $PALAVRA $DIRETORIO/*/* | less
grep -i $PALAVRA $DIRETORIO/*/*/* | less
echo '----------------------'
echo 'Por favor, aguarde...'
echo '----------------------'
grep -i $PALAVRA $DIRETORIO/*/*/*/* | less
echo '----------------------------------------------------'
echo 'Algumas buscas são demoradas, por favor, aguarde...'
echo '----------------------------------------------------'
grep -i $PALAVRA $DIRETORIO/*/*/*/*/* | less
echo '-----------------------------------------'
echo 'Continuando busca, por favor, aguarde...'
echo '-----------------------------------------'
grep -i $PALAVRA $DIRETORIO/*/*/*/*/*/* | less
echo '------------------------------------------------------------------------'
echo 'Busca encerrada! Caso não tenha encontrado o que deseja, tente de novo;'
echo 'sendo MENOS específico nas Palavras e MAIS específico no Diretório...'
echo '___Edson_de_Lima___'
echo '------------------------------------------------------------------------'
[4] Comentário enviado por m0pheu5 em 19/10/2004 - 11:37h
poxa bacana mesmo, muito mais facil de procurar a palavra chave do que ficar abrindo arquivo por arquivo e procurar através da ferramenta do VI.
Abraços
[14] Comentário enviado por NewtonJr. em 27/01/2016 - 17:33h
Prezado, em primeiro lugar parabéns pela sua ótima contribuição.
Eu testei seu script para procurar todos os scripts no servidor que tinham meu nome (sempre assino os meus) mas não deu certo.
Tomei a liberdade de fazer algumas mudanças no seu script e deram resultado no meu ambiente.
A principal mudança foi trocar a condição que você colocou por :
cat "$file" | grep "$PALAVRA" > /dev/null && flag="true"
# Verificar se o arquivo tem a palavra que buscamos
if [ "$flag" = "true" ]; then
Outras mudanças foram melhorar a indentação, retirar os comandos echo isolados e adicionar echo -e "\nblablabla\n", colocar o código 0 (ou 1) no exit e colocar todas as variáveis dentro de aspas duplas como boa prática de programação em shell. Ademais, adicionei a opção -n no grep que carrega o arquivo e entrega para o less afim de melhorar a saída para o usuário: grep -in "$PALAVRA" "$file" | less
Eis o script:
#!/bin/bash
echo 'Este script procura por palavras dentro de arquivos!!!'
echo 'Limpando a tela...'
sleep 2
clear
echo '<Entre> com as palavras que você deseja localizar:'
echo -n "PALAVRA: "
read PALAVRA
echo 'Dependendo da quantidade de combinações encontradas, a lista será mostrada'
echo 'paginada. Para navegar utilize a tecla {q} e para abortar {[ctrl_c]q}'
echo '---------------------------------------------------------------------'
echo 'Para agilizar a busca, <entre> com um Diretório [NÃO use asterisco]...'
echo -n "DIRETÓRIO: "
read DIRETORIO
echo
# Verificar se o diretório existe
if [ ! -d "$DIRETORIO" ];then
echo -e 'Este diretório não existe. Por favor, refaça a busca...\n'
exit 0
fi
# Alterar IFS(Inter Field Separator) para quebra de linha
oldIFS="$IFS"
IFS='
'
# Variáveis de controle(palavras localizadas e não localizadas)
found=0
notfound=0
# verificar se existem arquivos no diretŕio e sub-diretório(s)
if [ $(find "$DIRETORIO" -type f | wc -l) -gt 0 ]; then
# Percorrer cada arquivo listado
for file in `find "$DIRETORIO" -type f`;do
# Verificar se o arquivo tem a palavra que buscamos
if [ "$flag" = "true" ]; then
# Palavra foi encontrada
echo "Carregado $file..."
grep -in "$PALAVRA" "$file" | less
found=`expr $found + 1`
else
# Palavra não foi encontrada
echo "Ignorando $file..."
notfound=`expr $notfound + 1`
fi
flag="false"
done
else
echo -e "Este diretório e/ou subdiretório(s) não possuem arquivos...\n"
exit 0
fi
echo -e "\n$(tput setaf 2)Foram econtrados $found arquivo(s) com a palavra $PALAVRA$(tput sgr0)"
echo -e "$(tput setaf 1)Foram econtrados $notfound arquivo(s) sem a palavra $PALAVRA$(tput sgr0)\n"
echo '------------------------------------------------------------------------'
echo 'Busca encerrada! Caso não tenha encontrado o que deseja, tente de novo;'
echo 'sendo MENOS específico nas Palavras e MAIS específico no Diretório...'
echo '___Edson_de_Lima___'
echo '------------------------------------------------------------------------'
[15] Comentário enviado por Xxoin em 27/01/2016 - 21:08h
Prezados, agradeço a todos que têm usado e aperfeiçoado o script! Isso demonstra o espírito da Comunidade Viva o Linux. Minha sugestão é que os colegas que têm contribuído inserissem seus nomes na autoria, semelhante a um controle de versão ;-) Edson.