Dúvida - Como fazer backup

1. Dúvida - Como fazer backup

Rogério Tonini
rtonini

(usa Debian)

Enviado em 04/08/2011 - 15:38h

Boa tarde, estou montando uma rotina de backup, que funcionará da seguinte forma:

1-) O usuário de informará a pasta (o diretório). Por exemplo: Controles (esta pasta fica dentro de /home/usuario) e outra /Teste.
2-) A rotina deverá localizar as pastas inseridas em um arquivo texto, localizar a pasta principal e armazenar em um novo arquivo que será lido pela rotina.

Tentei utilizar o locate, porém ele traz a string em qualquer combinação de diretórios e pastas.

Gostaria que alguém me desse alguma luz.

Abraços e obrigado.




  


2. Re: Dúvida - Como fazer backup

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/08/2011 - 16:46h

read -i "Entre a pasta a ser becapada: " pasta1
read -i "Entre a pasta destino: " pasta2

rsync -vaxE $pasta1 $pasta2/

note que por conta da barra em $pasta2/ a pasta1 sera copiada integralmente para DENTRO da pasta2 e nao substituindo.

e pode acrescentar "--delete" depois de -vaxE se quiser um espelho perfeito da pasta origem e pasta destino (cuidado, porque isso apaga o arquivo destino se o arquivo origem tiver sido apagado, mesmo que por engano -- quer dizer: voce pode detonar o becape se algo ruim aconteceu com o original)

mais info: man rsync


3. Re: Dúvida - Como fazer backup

Rogério Tonini
rtonini

(usa Debian)

Enviado em 04/08/2011 - 16:57h

vfs, acho que não expliquei corretamente.

Tenho uma rede ponto-a-ponto e a estrutura de diretórios:
Maquina 1 - Linux, o usuário que a utiliza é o dono da empresa
/home
/usuario1
/usuario1/abc
/usuario1/caixa (esta pasta contém documentos da empresa e que somente o "usuário1" utiliza)
/usuario1/documentos
/teste (esta pasta esta em outro volume e foi craida pelo "usuário1" e esta compartilhada com outra estação windows)

O dono da empresa pode criar a pasta que ele achar necessária e qdo quiser.

Quero fazer o seguinte uma rotina para realizar o backup em um HD externo (com padrão NTFS, para utilizar em qualquer lugar).
O usuário deverá informar qual(ais) pasta(s) que quer fazer a cópia. A rotina deverá localizar a pasta na estrutura de diretórios e realizar a cópia.


4. feito!

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 06/08/2011 - 22:23h

Cara, resolvi criar este script pra você, pois sei que isso pode ser útil pra outros ninjas do opensource.
Explicando: Primeiramente ele vai te perguntar qual pasta você deseja copiar, no próximo passo ele te perguntará o caminho do qual vc quer enviar (insira o caminho completo).
Caso você digitou a pasta "controles" e no sistema possui a pasta controles2 e controles7 todas serão listadas e numeradas para você escolher qual delas quer copiar.
Exemplo:
1 /tmp/controles
2 /opt/controles2
3 /usr/controles7

Agora você digita: 1, 2 ou 3 e a pasta será copiada para este caminho.
Caso ocorra algum problema na cópia o script enviará a mensagem "Erro ao copiar a pasta, verificar permissoes". No caso positivo da cópia imprimirá:
"Pasta <nome_pasta> copiada com sucesso para <caminho>".

Também inseri neste script a condição para o usuário ser obrigado a digitar a pasta e o caminho, se estiverem em branco o script finaliza automaticamente e o usuario recebe a mensagem:
"Os 2 campos acima devem ser preenchidos"

Bom divertimento!

#!/bin/bash
k=0
SAIDA1="/tmp/pastas1.txt"
SAIDA2="/tmp/pastas2.txt"

DELETE_FILES()
{

rm -f $SAIDA1 $SAIDA2

}

echo "Qual pasta vc deseja copiar?"
read pasta

echo "Para onde voce deseja mover a pasta $pasta?"
read destino

if [ -z $pasta ] || [ -z $destino ]; then

echo "Os 2 campos acima devem ser preenchidos"
exit 1

fi

find / -type d -iname *$pasta* 2> /dev/null > $SAIDA1

if [ `cat $SAIDA1 | wc -l` -gt "1" ]; then

echo -e "\nFoi localizada mais de 1 pasta! Digite o numero dela:\n"

cat $SAIDA1 | while read line
do

echo "$k $line" >> $SAIDA2
let k++

done

cat $SAIDA2

read num
if [ -z $num ]; then

echo "Voce deve escolhar um numero. Execute novamente!"
exit 1

fi

pasta_correta=`grep ^$num $SAIDA2 | cut -d' ' -f2`
cp -rvp "$pasta_correta" "$destino" > /dev/null
if [ $? -eq 0 ]; then

echo "Pasta $pasta_correta copiada com sucesso para $destino"

else

echo "Erro ao copiar a pasta, verificar permissoes"

fi

DELETE_FILES

else


cp -rvp `cat $SAIDA1` "$destino" > /dev/null
if [ $? -eq 0 ]; then

echo "Pasta $pasta copiada com sucesso para $destino"

else

echo "Erro ao copiar a pasta, verificar permissoes"

fi


DELETE_FILES

fi



5. Nada feito

Rogério Tonini
rtonini

(usa Debian)

Enviado em 07/08/2011 - 16:26h

Vlw alexandre pela ajuda, mas esse rotina rodara pelo cron.
O usuário irá digitar apenas o nome da pasta que ele quer, infelizmente ele é um usuário e necessita usar o linux devido a uma aplicação especifica que foi adquirida por um custo baixissimo.
Pedir a ele que digite o caminho completo da pasta se nem conhece fica complicado.

A sua solução é ótima e já tinha pensado. Minha lógica foi a seguinte: capturar em uma var. a primeira ocorrência do tal diretório que estiver no arquivo de controle no arquivo temporário e td resolvido, mas e se o usuário criar embaixo do /home um dir. "teste" e em outro volume outro "/teste" e ser este que ele quer copiar a rotina falhará.

Se puder me ajudar agradeço. Abraços.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts