Comparar duas pastas e copiar arquivos faltantes [RESOLVIDO]

1. Comparar duas pastas e copiar arquivos faltantes [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 30/09/2008 - 10:05h

Fala pessoal tudo bem, estou começando em Shell e preciso de uma ajuda para resolver um problema.

Tenho uma condição assim: preciso comparar 2 pastas e sincronizar os arquivos que faltam, na pasta2, onde pasta1 sempre terá todos os arquivos, ex.:

pasta1 - arq1.txt, arq2.txt, arq3.txt, arq4.txt, arq5.txt, arq6.txt, arq7.txt
pasta2 - arq1.txt, arq2.txt, arq6.txt, arq7.txt

portanto faltando no meu exemplo os arq3, 4 e 5.

Acredito que um caminho seria, eu ver a diferença entre as duas pastas e jogar para um arquivo,

diff /pasta1 /pasta2 >> compara.txt #Compara e joga para uma arquivo

ai minha dúvida como leio este arquivo e copio os arquivos que faltam?

ou se alguem tiver um outro metodo, fico muito grato pelas informações.

abs a todos




  


2. Re: Comparar duas pastas e copiar arquivos faltantes [RESOLVIDO]

Lôammy Palessy Lima
loammy

(usa Debian)

Enviado em 30/09/2008 - 10:15h

Eu sei que você quer fazer isto via shell-script, mas eu faço algo semelhante usando o rsync. Que em sua primeira execução faz uma copia completa (leia-se Backup-FULL) e nas próximas execuções ele faz uma copia dos arquivos alterados e dos arquivos que não existem no destino (leia-se Backup-Diferencial)....

Espero ter ajudado...


3. RSYNC

Wesley Nascimento da Silva
wgdesigner

(usa Linux Mint)

Enviado em 30/09/2008 - 10:23h

O amigo aí de cima citou o rsync para usar o rsync você pode usar a seguinte grafia:
#rsync -avz /pasta/ /pasta_destino


4. Re: Comparar duas pastas e copiar arquivos faltantes [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 30/09/2008 - 12:43h

Grato pela dica, não a conhecia, mas testei e não me resolveu, vou especificar um pouco mais, tenho dois servidores oracle, principal (server) e standby (serverbk).

Uso o comando mount junto com NFS, para "mapear" uma pasta no serverbk e gerar tb nesta pasta arquivos de logs, são gerados ao mesmo tempo nos dois servidores, o problema é que se demorar para subir o serverbk são gerados arquivos no servidor principal assim: log1, log2, 3, 4.... etc na hora que o serverbk entrar são gerados nos dois ao mesmo tempo, no server log1, log2, 3, 4, 5, 6, 7, 8, 9, no serverbk estará log5, 6, 7, 8, 9, faltando os 4 primeiros, pois o servidor principal já estava em produção.

E com o comando passado, ele irá copiar novamente, o 5, 6, 7, 8, 9, pois na lista que o rsync cria ela não foi atualizada com estes arquivos que já foram gerados e já estão na minha pasta do serverbk, ai até terminar de copiar já será gerado mais um grande numero...






5. Comando diff

Weverton Roberts da Silva
robertsweb

(usa Debian)

Enviado em 30/09/2008 - 16:05h

Kra eu tbem estou começando no Shell, mas achei uma resposta para o meu problema nesse link do VOL http://www.vivaolinux.com.br/perguntas/verPergunta.php?codigo=56924, sem contar que eu estava na mesma situação.
Aqui eu usei isso com arquivos:

if test arquivo -ot arquivo1 ; then
diff arquivo arquivo1 > arquivo.diff
fi

Tenta isso e vê se consegue com as adaptações necessárias pra vc.
Abraços.


6. Re: Comparar duas pastas e copiar arquivos faltantes [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

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

Pessoal, como precisava muito deste arquivo, comprei um livro, não sei se pode sitar nome, portanto não vou, muito bom de shell, que me ajudou e conseguir montar o seguinte script que me resolveu.
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


7. Re: Comparar duas pastas e copiar arquivos faltantes [RESOLVIDO]

Wilton Leite
wirj

(usa Ubuntu)

Enviado em 30/12/2010 - 14:38h

rsync -avzp --delete-excluded root@192.168.0.225:/???? /backup/sincronismo

onde: root@192.168.0.225:/???? ( origem) e destino ( /backup/sincronismo) ..um exemplo.
Poe no cron para sincronizar de tempo em tempo.
Bom script o seu, vai me ajudar também. Abraços






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts