Remove linhas

Publicado por Rafael Klock (última atualização em 22/07/2010)

[ Hits: 7.763 ]

Homepage: http://bredes.com.br/

Download Removelinhas.sh

Download Removelinhasv2 (versão 2)




Verifica em um determinado diretório todos os arquivos e exclui as linhas que você desejar. Exemplo:

$ Removelinhas.sh /home/rafael/teste cavalo

Esse comando irá verificar dentro da pasta "teste" arquivo por arquivo. Se o arquivo contiver a palavra cavalo, ele exclui apenas aquela linha.

O script vem com a opção --help caso precisem de ajuda.

DICA: Para executar o script de qualquer lugar, copiem o script para a pasta /bin:

$ sudo cp Removelinhas.sh /bin/Removelinhas

Espero que seja útil.

Falou!

  



Versões atualizadas deste script

Versão 2 - Enviado por Rafael Klock em 14/07/2010

Changelog: Nova versão, com algumas correções, e com opções de backup.

falow

Download Removelinhasv2


Esconder código-fonte

#/bin/bash



# HELP 
if [ "$1" = "--help" -o "$1" = "-h" ];then
clear
echo ""
echo ""
echo "      --->    Remove Linhas V.01    <---"
echo ""
echo "USO:    Removelinhas [DIR] [PALAVRA A SER EXCLUIDA]"
echo ""
echo "Ex:     Removelinhas /home/user/teste/ zabuloni.silva"
echo "exclui as linhas que contém "zabuloni.silva", em todos os arquivos da pasta teste"
echo ""
#echo "Erro n1: Provavelmente você esteja digitando um número em vez de um diretório."
#echo ""
echo "Email para contato: kklockk@gmail.com"
echo ""
exit 0
fi


# VARIAVEIS 
contarqalt="0"
contperm="0"
contdir="0"
linha="1"
WC=$((1+`ls -1|wc -l`))


# IF que força passar dois parametros 

if [ "$1" = "" -o "$2" = "" ]; then
echo ""
echo ""
echo "Tente:  Removelinhas [DIRETORIO] [PALAVRA A SER EXCLUIDA]"
echo ""
echo "Ajuda: ->   Removelinhas.sh --help"
echo ""
exit 0
fi


# PROCESSO 
echo ""
echo "O Processo foi iniciado. Aguarde."

echo "" >> ~/logremovelinhas.txt
echo "*************************************************" >> ~/logremovelinhas.txt
echo "INICIO DO LOG: **( $2 )**    Data: `date`" >> ~/logremovelinhas.txt
echo "" >> ~/logremovelinhas.txt



# GREP 
echo "       # Comando grep $2 $1 #" >> ~/logremovelinhas.txt
grep $2 $1/* >> ~/logremovelinhas.txt
echo "" >> ~/logremovelinhas.txt

echo "       # Arquivos Alterados #" >> ~/logremovelinhas.txt


# INICIO DO WHILE  
while [ $linha != $WC ]; do

  HEAD=`ls $1 -1| head -n $linha |tail -n 1`


  #teste se o HEAD for um arquivo, ele executa o algoritmo.
  test -f $HEAD
  if [ "$?" -eq "0" ]; then
      test -w $HEAD
      if [ "$?" -eq 0 ]; then
             cat $HEAD |grep "$2" -v > FILE.TMP
         cmp FILE.TMP $HEAD -s >> ~/logremovelinhas.txt
         if [ "$?" -eq "0" ]; then
         rm FILE.TMP
            else
            contarqalt=$(($contarqalt+1))
            echo "Arquivo alterado: $HEAD" >> ~/logremovelinhas.txt
            rm $HEAD
            mv FILE.TMP $HEAD
         fi
             else
             contperm=$(($contperm+1))
        echo "Não tem permissão: $HEAD" >> ~/logremovelinhas.txt
      fi
      else
      contdir=$(($contdir+1))
  fi
  linha=$(($linha+1))
done

test -e $1/FILE.TMP
if [ "$?" -eq "0" ]; then
rm $1/FILE.TMP
fi

echo "" >> ~/logremovelinhas.txt
echo "Voce tem $contdir pastas." >> ~/logremovelinhas.txt
echo "Arquivos alterados: $contarqalt" >> ~/logremovelinhas.txt
linha=$(($linha-1)) >> ~/logremovelinhas.txt
echo "Quantidade de arquivos verificados: $linha" >> ~/logremovelinhas.txt
echo "Quantidade de arquivos que vc não tem permição: $contperm" >> ~/logremovelinhas.txt
echo "Foi salvo um log no seguinte diretorio: ~/logremovelinhas.txt" >> ~/logremovelinhas.txt

echo "" >> ~/logremovelinhas.txt
echo "FIM DO LOG!      DATA: `date`" >> ~/logremovelinhas.txt
echo "**************************************************" >> ~/logremovelinhas.txt
echo "" >> ~/logremovelinhas.txt
echo "" >> ~/logremovelinhas.txt
echo ""
echo "Processo Finalizado!   Log salvo em:  ~/logremovelinhas.txt"
echo ""

Scripts recomendados

Inserção de máquinas no banco de dados para controle interno

Simples inventário de máquinas em Shell Script

Limpando cache do Squid (Baseado em Debian)

Tradução de endereços de uma rede interna

Failover WAN entre dois links


  

Comentários
[1] Comentário enviado por rafael.klock em 13/07/2010 - 14:50h

Em breve irei publicar a nova versão!

[2] Comentário enviado por luismello em 12/08/2010 - 00:16h

Ola

Testei e nao removeu a linha com a palavra, no arquivo de log mostra todas as linhas com a palavra.
Mas nao exlui a linha e nao da erro algum.

Poderia ajudar?

[3] Comentário enviado por rafael.klock em 12/08/2010 - 09:37h

tens como mandar o log pro meu email? kklockk@gmail.com


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts