Comparar pasta origem com pasta destino e copiar os arquivos que faltam

Publicado por nelio em 06/10/2008

[ Hits: 14.163 ]

 


Comparar pasta origem com pasta destino e copiar os arquivos que faltam



Estava com problemas para resolver este assunto no Linux, procurei muito na net, postei no fórum e não consegui uma resposta satisfatória. Então com auxílio de um livro consegui criar este script, que acredito ser de grande utilidade, uma vez que o rsync não me ajudou muito.

Caso achem que o código está muito poluído, retirem os comentários.

Para mim funcionou, pois meus arquivos sempre estarão na pasta origem e faltando na pasta destino, caso seja o contrário, aqui dá para ter uma boa idéia de como correr atrás.

ABS...

#!/bin/sh

#São necessários alterar apenas estas 3(três) variáveis

origem=/teste #Pasta de origem, altere /teste pelo caminho necessário
dest=/teste2 #Pasta destino, altere /teste2 pelo caminho necessário
arq_comp=/scripts/arq_compara #Arquivo criado para comparação entre as duas pastas, altere /scripts/arq_compara pelo caminho necessário

diff /$origem /$dest | cut -d: -f2 | cut -d" " -f2 > $arq_comp #Compara as duas pastas, recorte o que não interessa e deixe só o nome do arquivo e jogue para um arquivo de comparação que será lido durante a exec do programa

if test -s $arq_comp #Verifica se o arquivo de comparação está vazio.
then
while test -s $arq_comp #Caso não esteja, entra em loop para sincronismo
do
var=`head -1 $arq_comp` #Lê a primeira linha do arq de comparação e joga para uma variável temporária
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 comparação, não há problema se não apagar, pois será sobrescrita na próxima exec do programa
echo "Pastas sincronizadas com sucesso!!!" #Mensagem de sucesso, pode ser removida também
else
echo "Pastas já sincronizadas!!!" #caso os arquivos já estejam sincronizados, exibe esta mensagem
rm -f $arq_comp #Apaga arquivo de comparação temporário
fi
exit

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Twittar via terminal no Linux

Habilitando X11 via SSH no Slackware

Ordenando strings em shell script

Montando imagens como partições

Procurando vídeos de YouTube pelo terminal e assistindo via mpv

  

Comentários
[1] Comentário enviado por m4rc310 em 07/10/2008 - 10:07h

Por que você não usa "cp -u" ?

-u, --update
copy only when the SOURCE file is newer than the destination file or when the destination file is missing

Assim só é copiado quando o arquivo fonte é mais recente que o arquivo destino ou quando o aquivo destino não existe.

[2] Comentário enviado por neliobjr em 07/10/2008 - 11:07h

Pq fica muito simples e eu não gosto de coisas simples. rsrsrs

Pq o arquivo pode ser alterado na pasta origem, e não na pasta dest, e eu não quero que sobrescreva na pasta dest o arq alterado na pasta origem. E sim copie só os que faltam.

Agora se tiver uma opção, que copie só os que faltam sem alterar os que são mais recentes, fiz tudo em vão, mas desconheço.

[3] Comentário enviado por volcom em 09/09/2009 - 14:06h

Pode usar também o rsync:

rsync [opções] [origem] [destino]

rsync --help

ou

man rsync

Abraço!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts