shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RES: [shell-script] Script para comparação de diretorios entre servidore


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] Script para comparação de diretorios entre servidores e equiparaçao.
Date: Fri, 29 Nov 2002 09:43:58 -0300

Olá André,
qdo vc dá a saida do ftp em um arquivo usando a opção -v (verbose), muita
informação inútil vai ser gerada neste arquivo, dando problema no diff que
vc faz posteriormente. Por outro lado, no ftp, qdo vc faz:

ls arqr arql

O resultado do ls arqr será colocado no arquivo local arql. Acho que seu
script poderia ser enxugado mais ou menos assim:

read -p "Nome da Máquina Remota: " Host
read -p "Usuário em $Host: " UName
read -sp "Senha em $Host: " PW # Desta forma vc nao expoe a senha no script 

ftp -ivn $Maq > trab << FimFTP
    user $UName $PW
    prompt # para evitar perguntas bobas no ls
    ls <caminho a ser comparado> arql
FimFTP

if grep "Transfer complete" > /dev/null  ### Nao executou o ls ####
then
  erro1=1
else
  erro1=0
fi

Qdo vc faz um ls desta forma, o ftp não aceita a opção -p então o grep tem
que ser feito de outra forma. Onde vc fazia:

grep -v "/" ftp_$server1 > ls_file_$server1

faça

grep -v "^d" ftp_$server1 > ls_file_$server1

André, o seu programa está muito grande e pode ser enxugado muito +. Não
estou com tempo hábil para refazê-lo, mas coloco-me à sua disposição para
contato telefônico.

[ ]s,
Julio Cezar Neves
-Eu Apoio o Software Livre-
-I Support Free Software-
* +55 21 2528-7070  /  9853-4044
*address@hidden


> -----Mensagem original-----
> De: André Guerra [mailto:address@hidden]
> Enviada em: quinta-feira, 28 de novembro de 2002 18:52
> Para: address@hidden
> Assunto: [shell-script] Script para comparação de diretorios entre
> servidores e equiparaçao.
> 
> 
> 
> Senhores, segue um script que gera uma listagem de um 
> servidor local, outra listagem de um servidor remoto, compara 
> o servidor local com o remoto e apaga no servidor local o que 
> tem a mais e baixa o que esta faltando...
> 
> mas não está igualando, apagando o que tem a mais...alguem 
> tem uma ideia?
> 
> #!/bin/bash
> 
> server2="nome do servidor"
> server1="nome do servidor"
> user1="senha"
> passw1="senha"
> path1="caminho a ser comparado"
> path2="caminho a ser comparado"
> email="email que recebera relatorio"
> 
> typeset -i erro1 aux total_ok total_deleta total_erro 
> total_deleta_erro
> # Gerando lista de arquivos do Server1
> echo "open $server1" > conecta_$server1
> echo "user $user1 $passw1" >> conecta_$server1
> echo "as" >> conecta_$server1
> echo "cd $path1" >> conecta_$server1
> echo "ls -p" >> conecta_$server1
> echo "bye" >> conecta_$server1
> 
> ftp -nv < conecta_$server1 > ftp_$server1  2>/dev/null
> aux=`grep "Transfer complete" ftp_$server1 | wc -l`
> if [ $aux -eq 0 ]  ### Nao executou o ls ####
> then
>   erro1=1
> else
>   erro1=0
> fi
> 
> grep -v "/" ftp_$server1 > ls_file_$server1
> grep "_" ls_file_$server1 > ls_aux
> grep "\." ls_aux > pacotes_all_$server1
> 
> cat pacotes_all_$server1 | grep ".fpbd" > pacotes_isds_$server1
> 
> touch pacotes_$server1
> 
> diff pacotes_all_$server1  pacotes_isds_$server1 | grep "<" > 
> pacotes_aux
> cat pacotes_aux  | while read sinal pacote
>  do
>   echo $pacote >> pacotes_$server1
>  done
> 
>  rm pacotes_aux
>  rm pacotes_all_$server1
>  rm pacotes_isds_$server1
>  rm ls_aux
>  rm conecta_$server1
>  rm ls_file_$server1
> 
> ###
> ## Gerando lista de arquivos do Server2
> ls -1 -p $path2 > ls_all_$server2
> 
> grep -v "/" ls_all_$server2 > ls_file_$server2
> grep "_" ls_file_$server2 > ls_aux
> grep "\." ls_aux > pacotes_$server2
> 
>  rm ls_aux
>  rm ls_all_$server2
>  rm ls_file_$server2
> 
> 
> if [ $erro1 -eq 0 ]
> then
>   sort -io pacotes_$server1 pacotes_$server1 2>/dev/null
>   sort -io pacotes_$server2 pacotes_$server2 2>/dev/null
> 
> #Pacotes a serem deletados nesta TMR
>   diff pacotes_$server1 pacotes_$server2 | grep ">" > diferenca2da1
>   echo "************** Pacotes deletados na $server2 
> ****************" > informacoes_nivelamento_deleta
>   echo "" >> informacoes_nivelamento_deleta
>   total_deleta=0
>   total_deleta_erro=0
>   if [ -s diferenca2da1 ]
>   then
>     cat diferenca2da1 | while read sinal pacote
>     do
>       rm $path2/$pacote 2>/dev/null
>       if [ $? -eq 0 ]
>       then
>         total_deleta=$total_deleta+1
>         echo "$sinal  $pacote" >> informacoes_nivelamento_deleta
>       else
>         total_deleta_erro=$total_deleta_erro+1
>         echo "$sinal  $pacote *************** nao conseguiu 
> ser deletado " >> informacoes_nivelamento_deleta
>       fi
>     done
>   fi
>   echo "Total de pacotes deletados na $server2: 
> $total_deleta" >> informacoes_nivelamento_deleta
>   echo "" >> informacoes_nivelamento_deleta
>   echo "Total de pacotes que NAO conseguiram ser deletados na 
> $server2: $total_deleta_erro" >> informacoes_nivelamento_deleta 
> 
> # Pacotes a serem recuperados na server1:
>   diff pacotes_$server1 pacotes_$server2  | grep "<" > diferenca1da2
>   echo "" >> informacoes_nivelamento_erro
>   echo "" >> informacoes_nivelamento_ok
>   echo "" >> informacoes_nivelamento_erro
>   echo "" >> informacoes_nivelamento_ok
>   echo "" >> informacoes_nivelamento_erro
>   echo "" >> informacoes_nivelamento_ok
>   echo "************** Pacotes com erro de recuperacao na 
> $server2 ****************" >> informacoes_nivelamento_erro
>   echo "************** Pacotes com sucesso de recuperacao na 
> $server2 ****************" >> informacoes_nivelamento_ok
> 
>   total_ok=0
>   total_erro=0
>   if [ -s diferenca1da2 ]
>   then
>     cat diferenca1da2 | while read sinal pacote
>     do
>       echo "open $server1"              > conecta_$server1
>       echo "user $user1 $passw1"        >> conecta_$server1
>       echo "bin"                        >> conecta_$server1
>       echo "cd $path1"                  >> conecta_$server1
>       echo "lcd $path2"                 >> conecta_$server1
>       echo "get $pacote"                >> conecta_$server1
>       echo "bye"                        >> conecta_$server1
> 
>       rm ftp_$server1
>       ftp -nv < conecta_$server1 > ftp_$server1
>       aux=`grep "Transfer complete" ftp_$server1 | wc -l`
>       if [ $aux -eq 0 ]
>       then
>         total_erro=$total_erro+1
>         echo "$sinal  $pacote" >> informacoes_nivelamento_erro
>       else
>         chmod 775 $path2/$pacote
>         total_ok=$total_ok+1
>         echo "$sinal  $pacote" >> informacoes_nivelamento_ok
>       fi
>     done
>   fi
>   echo "" >> informacoes_nivelamento_erro
>   echo "Total de pacotes que NAO foram recuperados: 
> $total_erro" >> informacoes_nivelamento_erro
>   echo "" >> informacoes_nivelamento_ok
>   echo "Total de pacotes recuperados do $server1: $total_ok" 
> >> informacoes_nivelamento_ok
> 
> ## Concatenando todos os relatorios para ser enviado via e-mail
>   echo "Relatorio sobre todos os pacotes enviados/deletados 
> para a TMR $server2" > informacoes_nivelamento
>   echo "" > informacoes_nivelamento
>   echo "" > informacoes_nivelamento
>   echo "" > informacoes_nivelamento
>   cat informacoes_nivelamento_deleta 
> informacoes_nivelamento_erro informacoes_nivelamento_ok >> 
> informacoes_nivelamento
>   cat informacoes_nivelamento | mail -s "ISSI - Nivelamento 
> de pacotes entre o $server1 e o $server2" $email
> 
>  
> 
>  rm -fR ls_$server1 2>/dev/null
>  rm -fR ls_$server2  2>/dev/null
>  rm -fR pacotes_$server2 2>/dev/null
>  rm -fR pacotes_$server1  2>/dev/null
>  rm -fR diferenca1da2  2>/dev/null
>  rm -fR diferenca2da1  2>/dev/null
>  rm -fR conecta_$server1  2>/dev/null
>  rm -fR informacoes_nivelamento  2>/dev/null
>  rm -fR informacoes_nivelamento_ok  2>/dev/null
>  rm -fR informacoes_nivelamento_erro  2>/dev/null
>  rm -fR informacoes_nivelamento_deleta  2>/dev/null
> 
> else
>   cat ftp_$server1 | mail -s "ISSI - Erro ao acessar a 
> $server1 para acertar diferencas de pacotes." $email
> fi
>  rm -fR ftp_$server1
> 
> 
> 
> 
> ---------------------------------
> Yahoo! Acesso Grátis
> Internet rápida, grátis e fácil. Faça o download do discador 
> agora mesmo.
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de 
> programação, como perl, C etc. Quem insistir em não seguir 
> esta regra será moderado sem prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------
 

Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]