Script python para copias de seguridad locales con rsync

En Gnu/Linux hay diferentes programas para realizar la copia de seguridad pero personalmente me gustan las cosas simples, lejos de interfaces gráficas (que no tienen nada de malo, desde luego, pero que si puedo evitar usar pues evito).
En el comando rsync se encuentra un formidable aliado de las copias de seguridad que muchas veces olvidamos hacer. Posee suficientes opciones como para hacer una copia con todos los requisitos necesarios. computer-767784_640

El siguiente script en python realiza copias de seguridad a tal efecto. Vereis que es extremadamente simple e incluso para los que no tienen abosulutamente idea de este lenguaje, el añadir una línea para que el script haga sincronizaciónde un nuevo directorio resulta inmediato.
En mi maquina uso un disco duro externo que he llamado IOmega_HDD, en vuestro caso podeis renombrar en el script según vuestro caso.
Otra cosa es añadir o quitar directorios de la copia. En el mismo script como línea de comentario se explica cómo hacerlo.
Para automatizar la tarea podeis añadir una linea a crontab conteniendo el intérprete de python  y la ruta donde querais poner el script. Espero que os sea de utilidad.

Advertencia: el editor de wordpress no permite un espaciado al inicio de linea, así se ha perdido la indentación necesaria en el script, por ello he sustituido los espacios en blanco por puntos(.) que debeis eliminar con un editor y sustituir por espacios.

——————————————————————————————-
# -*- 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"

———————————————————————————


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Matias dijo

    Hola, que tal?
    Me gustó el script, muy simple.
    Sin ánimo de ofender, hice unas modificaciones para que quede más simple y legible, además de darle soporte para Python 2 y 3 (actualmente solo se podia correr en Python 2)

    Te dejo el link con las 2 versiónes, por si te interesa.
    http://linkode.org/1np9l2bi8IiD5oEkPIUQb5/Yfa4900cA76BpcTpcf4nG1

    1.    dandutrech dijo

      Estupendas modificaciones y me alegro que te guste el script

  2.   nifosio dijo

    Se agradece la intención, pero el resultado es cutre y salchichero.
    Mi sobrina de 4 años es capaz de hacer un script mas inteligente y configurable que esta patata que has puesto aquí.

    Por cierto, la indentación del código esta mal, revisa tus bucles y no me refiero a los del pelo

    1.    dandutrech dijo

      El script funciona perfectamente, lo llevo usando tiempo y, de hecho, por el número de gente que comparte no debe ser tan cutre como dices. Quizás debas llamar a tu sobrina para que vea si lo has puesto todo correctamemte

    2.    tr dijo

      Oye, aprende a valorar y en lugar de criticar, corrige, si es que tanto presumes.

      1.    dandutrech dijo

        Exacto tr, Matias ha hecho unas modificaciones estupendas. Ciertamente que el script es mejorable y de eso se trata en el mundo de la colaboración y así lo ha plasmado matias. Es una pena que anden por aquí individuos como para agriar el buen ambiente que debe imperar. Allá ellos.

    3.    abaddon s dijo

      ¿acaso crees que sirve de algo una critica grosera y que no aporta nada al scrip?PORQUÉ MEJOR NO ESCRIBES TÚ UN PUTO SCRIPT Y LO COMPARTES !!!!!!!

  3.   Idunno dijo

    Aquí otra versión: https://gist.github.com/Itsuki4/5acc3d03f3650719b88d
    Comenten los errores que tenga, ya lo corregiré (ahora estoy en windows y no lo pude probar).

  4.   zetaka01 dijo

    Bueno, yo uso rsync directamente con un script de shell, sin usar python.
    Pongo una línea por cada directorio origen y destino.
    Tengo varios scripts dependiendo del dispositivo sobre el que hago la copia, en mi caso incremental.
    Por ejemplo, para copiar mis libros a un usb de 128MB que se instala por defecto en
    /media/zetaka01/Sandisk128 pongo en el script LibrosAusb128.sh la linea siguiente:

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

    Si no existe el directorio destino te lo crea y borra del destino lo que no esté en el origen, por supuesto de forma recursiva.
    Un saludo.

  5.   zetaka01 dijo

    Ah, un error del copy/paste –delete, con dos guiones.

    Un saludo

  6.   dandutrech dijo

    Os animais a crear una interface gráfica? He visto las posibilidades de Tkinter y Tix pero para el control de elección de directorios quizás sea mejor Wx

  7.   zetaka01 dijo

    Ya hay una interfaz gráfica basada en GTK, se llama grsync.
    Dejo el enlace a Wikipedia, https://en.wikipedia.org/wiki/Grsync
    Un saludo.

  8.   fernando dijo

    Hola a todos. El script puede ser una maravilla o una simpleza no lo sé ni me importa pero las cosas se pueden decir de mil maneras y cuando se pueden decir bien ¿por qué decirlas mal? Dicho esto tengo que decir que soy usuario de linux desde 2008 y a pesar de todo este tiempo soy lento de aprendizaje y me cuesta mucho entender muchas cosas entre ellas cómo ejecutar un script (fácil ya lo sé pero uno no da pa más). hacer instalación de programas compilándolos etc etc. Por eso cuando he leído que existe una versión con interfaz gráfica he buscado y he encontrado esta página donde te lo dan todo mascado incluso. Para los torpes como un servidor aquí la dejo. Un saludo y gracias por vuestro esfuerzo.
    http://www.opbyte.it/grsync/download.html

    1.    dandutrech dijo

      fernando, sin acritud alguna y si no te importa contestar, tengo curiosidad en saber porqué razón usas Gnu/Linux. Gracias y un saludo

  9.   zetaka01 dijo

    Bueno, una interfaz gráfica es muy amigable pero no te da las opciones que te da un comando completo.
    Además, no es mi caso que lo hago a medida, un script, ya sea de shell o de python o de lo que quieras, te permite programarlo para que se ejecute cuando quieras.
    Ah, en tu distro de linux deberías tener rsync y grsync sin problemas en los repositorios.
    Un saludo.

  10.   zetaka01 dijo

    Ah Fernando, si llevas desde 2008 usando linux y no sabes como ejecutar un script, no tengo palabras.
    Un saludo

  11.   Gonzalo Martinez dijo

    Pa son todos ingenieros de sistemas aca que critican el script que hace alguien para colaborar, y si usar consola/script o lo que sea?

    Cuanta mierda al pedo por dios.

    Administro servidores Linux hace 10 años, y la verdad que la ereccion electronica de hacer todo con scripts se me paso hace rato, por ejemplo, para adminsitrar Bacula, prefiero usar la interfaz grafica que el shell para hacerme el importante, que realmente es medio penal.

    Uno tiene que ser productivo, si alguien se siente mas comodo haciendolo por interfaz, bien por el, lo que importa es el resultado, no como lo hagas.

    En mi trabajo anterior dirigia el area de IT de una empresa, y a la gente que tenia a cargo le pedia que haga algo puntual, me interesaba el resultado, no le decia «Configurame otro vhost en apache, usando el vi sin color en una termina de 30×20», que lo haga como le quede mas comodo, si el tipo preferia hacerlo asi, montando por SFTP y usando el notepad de windows, o rezando un padre nuestro, poco me importaba mientras lo haga bien.

    dandutrech, el script cumple su objetivo, que es lo importante, ahora lo que le cambiaria yo es que en vez de invocar el comando desde el shell, seria de repente usar Python-librsync, que es una libreria para usar las funciones de rsync dentro de Python.

    Con eso ganas portabilidad, el script te corre en cualquier ambiente, sea Linux, Windows u OS X.

  12.   DanDutrech dijo

    Gracias, Gonzalo. Tu sugerencia creo que es muy buena y voy a ponerla en el script. Un saludo