Script Python para backups locais com rsync

No Gnu / Linux existem diferentes programas para fazer o backup mas pessoalmente gosto das coisas simples, longe das interfaces gráficas (que não tem nada de errado, claro, mas se eu puder evitar usar, eu evito).
No comando rsync há um aliado formidável de backups que muitas vezes esquecemos de fazer. Possui opções suficientes para fazer uma cópia com todos os requisitos necessários. computer-767784_640

O script python a seguir faz cópias de backup para essa finalidade. Verá que é extremamente simples e mesmo para quem não tem absolutamente nenhuma ideia deste idioma, adicionar uma linha para que o script sincronize um novo diretório é imediato.
Na minha máquina utilizo um disco rígido externo que chamei de IOmega_HDD, no seu caso pode renomear no script de acordo com o seu caso.
Outra coisa é adicionar ou remover diretórios da cópia. No mesmo script da linha de comentário é explicado como fazê-lo.
Para automatizar a tarefa, você pode adicionar uma linha ao crontab contendo o interpretador python e o caminho onde deseja colocar o script. Espero que seja útil para você.

aviso: o editor wordpress não permite espaçamento no início da linha, portanto o recuo necessário no script foi perdido, então substituí os espaços em branco por pontos (.) que você deve eliminar com um editor e substituir por espaços.

——————————————————————
# -*- coding: utf-8 -*-
import os
ruta_usuario=os.getcwd()
ruta_volumen="/media/Iomega_HDD" #Modificar según nombre de disco externo
directorio_destino=ruta_volumen + "/" + "RsyncBackup"
try:
....if os.path.exists(directorio_destino):
........pass
....else:
........os.mkdir(directorio_destino,0777)
....directorios_origen=[] ....rutas_directorios_origen=[] ....#Se añaden los directorios para sincronizar
....directorios_origen.append("Documentos")
....directorios_origen.append("Imágenes")
....directorios_origen.append("Descargas")
....#Añadir aquí otros directorios que se deseen sincronizar
....#o eliminar de las líneas anteriores los que no se deseen
....for rutas in directorios_origen:
....rutas_directorios_origen.append(ruta_usuario + "/" + rutas)
....for rutas in rutas_directorios_origen:
....print "Sincronizando " + rutas + " con " + directorio_destino
....os.system("rsync -ahv --progress" + " " + rutas + " " + directorio_destino)
....print "Proceso terminado"
except OSError:
print "Ha ocurrido un error ¿está el disco externo listo?"
except:
print "Ha ocurrido un error"

---------------------------


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Matias dito

    Olá como vai você?
    Gostei do roteiro, muito simples.
    Sem ofensa, fiz algumas modificações para torná-lo mais simples e mais legível, além de suportar Python 2 e 3 (atualmente, ele só poderia ser executado em Python 2)

    Deixo-vos o link com as 2 versões, caso esteja interessado.
    http://linkode.org/1np9l2bi8IiD5oEkPIUQb5/Yfa4900cA76BpcTpcf4nG1

    1.    dandurich dito

      Ótimos mods e fico feliz que você goste do roteiro

  2.   niphosio dito

    A intenção é apreciada, mas o resultado é pegajoso e salsicha.
    Minha sobrinha de 4 anos é capaz de fazer um script mais inteligente e configurável do que essa batata que você colocou aqui.

    A propósito, o recuo do código está errado, verifique seus loops e não me refiro aos de cabelo

    1.    dandurich dito

      O script funciona perfeitamente, estou usando há muito tempo e, na verdade, devido ao número de pessoas que o compartilham, não deve ser tão ruim quanto você diz. Talvez você deva ligar para sua sobrinha para ver se configurou tudo corretamente

    2.    tr dito

      Ei, aprenda a valorizar e ao invés de criticar, corrija, se você tanto se gabar.

      1.    dandurich dito

        Exatamente, Matias fez algumas grandes modificações. Certamente o roteiro pode ser melhorado e é disso que se trata no mundo da colaboração e é assim que Matias o expressou. É uma pena que haja gente por aqui para azedar o bom ambiente que deveria prevalecer. Lá estão eles.

    3.    abadon s dito

      Você acha que uma crítica rude é útil e que não contribui em nada para o script? MELHOR, NÃO ESCREVA A PORRA DE UM SCRIPT E COMPARTILHE !!!!!!!

  3.   Não sei dito

    Aqui está outra versão: https://gist.github.com/Itsuki4/5acc3d03f3650719b88d
    Comente os erros que tenho, vou corrigir (agora estou no windows e não consegui testar).

  4.   Zetaka01 dito

    Bem, eu uso o rsync diretamente com um script de shell, sem usar o python.
    Eu coloquei uma linha para cada diretório de origem e destino.
    Tenho vários scripts dependendo do dispositivo em que faço a cópia, no meu caso incremental.
    Por exemplo, para copiar meus livros para um USB de 128 MB que é instalado por padrão em
    / media / zetaka01 / Sandisk128 Coloquei no script LibrosAusb128.sh a seguinte linha:

    rsync -av –delete / home / zetaka01 / Books / media / zetaka01 / Sandisk128 /

    Se o diretório de destino não existir, ele o cria para você e apaga do destino o que não está na origem, recursivamente, é claro.
    Uma saudação.

  5.   Zetaka01 dito

    Ah, um erro de copiar / colar - excluir, com dois hifens.

    Uma saudação

  6.   dandurich dito

    Você quer criar uma interface gráfica? Eu vi as possibilidades do Tkinter e Tix mas para o controle da escolha dos diretórios talvez Wx seja melhor

  7.   Zetaka01 dito

    Já existe uma interface gráfica baseada em GTK, ela se chama grsync.
    Deixo o link para a Wikipedia, https://en.wikipedia.org/wiki/Grsync
    Uma saudação.

  8.   fernando dito

    Olá a todos. O roteiro pode ser uma maravilha ou uma simplicidade que não conheço ou me importo, mas as coisas podem ser ditas de mil maneiras e quando podem ser ditas bem, por que dizê-las erradas? Posto isto, devo dizer que sou utilizador de Linux desde 2008 e apesar de todo este tempo sou lento para aprender e é muito difícil para mim compreender muitas coisas incluindo como executar um script (fácil eu sei mas não dá mais). instalar programas compilando-os etc. etc. Por isso, quando li que existe uma versão com interface gráfica, procurei e encontrei esta página onde te dão tudo até mastigado. Para o desajeitado como servidor, deixo aqui. Saudações e obrigado pelo seu esforço.
    http://www.opbyte.it/grsync/download.html

    1.    dandurich dito

      fernando, sem nenhuma amargura e se não se importa em responder, estou curioso para saber porque você usa GNU / Linux. Obrigado e cumprimentos

  9.   Zetaka01 dito

    Bem, uma interface gráfica é muito amigável, mas não oferece as opções que um comando completo oferece.
    Além disso, não é o meu caso que o faço por medida, um script, seja shell ou python ou o que você quiser, permite programá-lo para ser executado quando quiser.
    Ah, na sua distribuição linux você deve ter rsync e grsync sem problemas nos repositórios.
    Uma saudação.

  10.   Zetaka01 dito

    Ah Fernando, se você usa linux desde 2008 e não sabe rodar um script, não tenho palavras.
    Uma saudação

  11.   Gonzalo Martinez dito

    Pa são todos engenheiros de sistema aqui que criticam o script que alguém faz para colaborar, e se usar console / script ou algo assim?

    Quanta merda para peidar, pelo amor de Deus.

    Tenho gerenciado servidores Linux há 10 anos, e a verdade é que me passou um tempo atrás a ereção eletrônica de fazer tudo com scripts, por exemplo, para administrar o Bacula, prefiro usar a interface gráfica do que o shell para fingir ser importante, o que na verdade é um meio criminoso .

    Tem que ser produtivo, se alguém se sente mais confortável fazendo por interface, bom pra ele, o que importa é o resultado, não como você faz.

    No meu trabalho anterior dirigi a área de TI de uma empresa, e os responsáveis ​​pediram-lhe para fazer algo específico, fiquei interessado no resultado, ele não disse «Configurar outro vhost no apache, usando o vi sem cor num terminal 30 × 20 ”, que ele faça como é mais confortável para ele, se o cara preferisse fazer assim, montando pelo SFTP e usando o notepad do windows, ou rezando pro nosso pai, não me importava desde que ele fizesse direito.

    dandutrech, o script cumpre seu objetivo, que é o importante, agora o que eu mudaria é que em vez de invocar o comando do shell, de repente ele estaria usando Python-librsync, que é uma biblioteca para usar as funções rsync dentro Pitão.

    Com isso você ganha portabilidade, o script roda em qualquer ambiente, seja Linux, Windows ou OS X.

  12.   DanDutrechGenericName dito

    Obrigado, Gonzalo. Sua sugestão eu acho muito boa e vou colocá-la no roteiro. Uma saudação