quarta-feira, 19 de outubro de 2016

Procurando texto em arquivos de diversos diretórios

Faço uso de mala direta e uso as ferramentas que criei para propósitos diferentes como comunicar o número de faltas, divulgar notas de trabalhos e provas bem como emitir comunicados com meus alunos.

Às vezes os alunos mudam o endereço de e-mail e preciso atualizar em todos os meus programas. Como procurar todas as ocorrências nos arquivos que estão espalhado em diversos diretórios?

Acompanhe o shell script a seguir no qual a aluna Rosalia pediu para receber meus comunicados em outro endereço de e-mail.

#!/bin/bash
find . -name \*.cs -exec ls {} \; > arquivosCS.txt
linhas=`wc -l arquivosCS.txt | awk '{printf "%s\n",$1}'`

for i in `seq $linhas`
  do
    grep -i rosalia `head -n $i arquivosCS.txt | tail -n 1` > /dev/null
    if [ $? == 0 ]
      then 
        echo `head -n $i arquivosCS.txt | tail -n 1`
    fi
  done
  

Os passos são:

  1. Fazer o levantamento de todos os arquivos que têm códigos-fontes (extensão .cs)
  2. Determinar quantos arquivos têm a extensão cs
  3. Executar o for para analisar cada arquivo (combinando head e tail)
  4. Se o nome da pessoa está naquele arquivo (comando grep), então $? retorna 0 (zero) que é o mesmo que verdadeiro.
  5. O que for verdadeiro, faço que exiba o arquivo com o comando echo.

A instrução > /dev/null direciona a saída para o dispositivo que anula seu efeito, ou seja, não imprime a saída.

Este script deve ser executado no diretório que contém todos os arquivos relevantes da sua busca, ou seja, será feita a busca em todos os níveis a partir do ponto onde é executado.

A saída abaixo gerou uma listagem de todos os arquivos que tenho que fazer as modificações:

./faltas2016s2/faltas2016s2/faltas2016s2/FaltaAlunos.cs
./RHMatFinEstatistica2016/RHMatFinEstatistica2016/RHMatFinEstatistica2016/MalaDireta.cs   
  

Conclusão: Funciona muito bem e recomendo que adote a ferramenta ao invés de confiar na memória acreditando que modificou em todos os arquivos necessários.

Nenhum comentário:

Postar um comentário