Ajuda com o diff!!! [RESOLVIDO]

1. Ajuda com o diff!!! [RESOLVIDO]

Walber Santos
walber

(usa CentOS)

Enviado em 01/10/2008 - 21:38h

Pessoal é o seguinte possuo duas pastas: pasta1 e pasta2 e dentro da pasta1 possuo3 arquivos: arquivo1 arquivo2 e arquivo3 e dentro da pasta2 tenho o arquivo1 e arquivo3
executando o comando: diff -r teste1 teste2 | cut -d' ' -f 4,5 então a saída é:
arquivo3, ou seja o arquivo3 está apenas na pasta1, gostaria de pegar a saída, no caso o arquivo3 e copia-lo para a pasta2.

Alguém pode me ajudar?


Valeu.


  


2. Re: Ajuda com o diff!!! [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 02/10/2008 - 17:12h

Seria, somente um arquivo a diferença, se sim, esta facil, estou com um problema semelhante, mas para muitos arquivos.., e para este não achei a solução, sem fazer um loop gigante, qualquer coisa da uma olhada na minha dúvida que esta 4 abaixo da sua, o pessoal respondeu sobre rsync mas para mim não serviu tb....

var_temp=`diff /pasta1 /pasta2 | cut -d: -f2 | cut -d" " -f2`

# uma variavel temp recebe o comando diff, com um cut para tirar o começo, no caso do meu arquivo sobrava um espaço em branco no começo apliquei outro cut, obs todo o comando vai entre crase e continuando.

cp /pasta1/$var_temp /pasta2

#ira copiar o arquivo faltante que esta registrado na variavel temporaria para a pasta2 (destino).

como já disse o que não consegui fazer é se o retorno tiver mais de uma pasta que falta... daqui a pouco descubro, um caminho que estou imaginando, é fazer um loop com read irá lendo e apagando o arquivo que já foi copiado, para o destino.


ABS


3. Re: Ajuda com o diff!!! [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 03/10/2008 - 14:34h

Véio, consegui resolver este problema e já postei no meu tópico mas aqui vai uma copia.

Caso achem que está muito poluido retirem os comentarios.
Para mim funcionou, pois meus arquivos sempre estarão na pasta origem, faltando na pasta destino, caso seja o contrario, aqui da para ter uma boa ideia

#!/bin/sh

#Sao necessarios alterar apenas estas 3(tres) variaveis

origem=/teste #Pasta de origem altere /teste, pelo caminho necessario
dest=/teste2 #Pasta destino altere /teste2, pelo caminho necessario
arq_comp=/scripts/arq_compara #Arquivo criado para comparacao entre as duas pasta, altere /scripts/arq_compara, pelo caminho necessario

diff /$origem /$dest | cut -d: -f2 | cut -d" " -f2 > $arq_comp #Compara as duas pastas, recorta o que nao interessa e deixa so o nome do arquivo e joga para um arquivo de comparacao que sera lido durante a exec do programa

if test -s $arq_comp #Verifica se o arquivo de comparacao esta vazio.
then
while test -s $arq_comp #Caso nao esteja entra em loop para sincronismo
do
var=`head -1 $arq_comp` #Le a primeira linha do arq de comparacao e joga para uma variavel temporaria
cp $origem/$var /$dest #Copia o arquivo que falta da pasta origem para o dest.
sed -i '1d' $arq_comp #Elimina a primeira linha que foi lida do arquivo.
echo $var #exibe a linha copiada
sleep 1 #Espera um seg. fique a vontade para comentar esta linha.
done #Fecha o Loop
rm -f $arq_comp #apaga arquivo de comparacao, nao ha problema se nao apagar pois sera sobrescrita na proxima exec do programa
echo "Pastas sinconizadas com sucesso!!!" #Mensagem de sucesso, pode ser removida tb
else
echo "Pastas ja sincronizadas!!!" #caso os arquivos ja estejam sincronizados, exibe esta mensagem
rm -f $arq_comp #Apaga arquivo de comparacao temporario
fi
exit



4. Vou testar

Walber Santos
walber

(usa CentOS)

Enviado em 03/10/2008 - 17:57h

Valeu.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts