acha_tudo

Publicado por Edson G. de Lima 11/06/2004 (última atualização em 30/05/2014)

[ Hits: 14.581 ]

Download acha_tudo

Download acha_tudo.bash (versão 2)




Para quem precisa encontrar uma palavra dentro de algum arquivo e não sabe onde/como, este script poderá agilizar (bastante) a busca!

Edson de Lima

  



Versões atualizadas deste script

Versão 2 - Enviado por Vitor Augusto M. Pio em 29/05/2014

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.

Download acha_tudo.bash


Esconder código-fonte

#!/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 '------------------------------------------------------------------------' 

Scripts recomendados

Paradise-Script

Share

Redimensionar várias imagens ao mesmo tempo

Script simples com interação com o usuário

Verifica se quem executa é root


  

Comentários
[1] Comentário enviado por IloveLinux2004 em 14/06/2004 - 01:01h

muito legal, bem bolado.

[2] Comentário enviado por ygorth em 17/06/2004 - 11:52h

gostei ! paginacao foi uma boa ideia!

[3] Comentário enviado por camilozero em 23/06/2004 - 12:52h

script interessante...
comandos comuns no shell viram grandes programas em um script!

[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

[5] Comentário enviado por gregorye em 05/05/2005 - 12:07h

pra mim tah acontecendeo isso:

grep: //var: Is a directory
./busca_texto: less: command not found
grep: //backup/monitor: Is a directory

alguem sabe porque ? less ?

[6] Comentário enviado por gregorye em 05/05/2005 - 12:10h

bom o less eu resolvi hauihaiu apt-get install less ;-)

[7] Comentário enviado por DiegoCC em 12/10/2006 - 12:12h

Niiiiice, gostei dos comandos.


Vivendo e aprendendo (recém saído do rWindows)

[8] Comentário enviado por micaelfis em 26/04/2007 - 18:07h

Show de bola este script!!!!

Salvou a minha vida! rs

[9] Comentário enviado por beijer em 09/04/2008 - 01:33h

ÉEEEEEEEEEEEEEEEEEEgua!!!

Meu Herói!!!
uahuahauauh

Valeu mesmo!

[10] Comentário enviado por gregory em 16/03/2010 - 11:40h

a paginação não esta funcionando aqui..

[11] Comentário enviado por quemiswsc em 12/03/2012 - 10:49h

tiró onda

[12] Comentário enviado por JohnRobson em 31/05/2014 - 14:10h

Eu não entendi qual a diferença para:

$ grep -ir "palavra" *

"-r" faz uma busca recursiva em todos os subdiretórios

[13] Comentário enviado por albfneto em 04/06/2014 - 16:30h

eu gostei desse script, prático. Favoritado e baixado.

[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&#341;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

cat "$file" | grep "$PALAVRA" > /dev/null && flag="true"

# 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 '------------------------------------------------------------------------'

# Retornar IFS ao padrão
IFS="$oldIFS"
exit 0

[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.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts