Script python per a còpies de seguretat locals amb rsync

En GNU / Linux hi ha diferents programes per realitzar la còpia de seguretat però personalment m'agraden les coses simples, lluny d'interfícies gràfiques (que no tenen res de dolent, per descomptat, però que si puc evitar fer servir doncs evito).
En la comanda rsync es troba un formidable aliat de les còpies de seguretat que moltes vegades oblidem fer. Posseeix suficients opcions com per fer una còpia amb tots els requisits necessaris. ordinador-767784_640

El següent script en python realitza còpies de seguretat a aquest efecte. Veureu que és extremadament simple i fins i tot per als que no tenen abosulutamente idea d'aquest llenguatge, el afegir una línia perquè l'script faci sincronizaciónde un nou directori resulta immediat.
En la meva màquina ús un disc dur extern que he anomenat IOmega_HDD, en el vostre cas podeu canviar el nom a l'script segons el vostre cas.
Una altra cosa és afegir o treure directoris de la còpia. En el mateix script com a línia de comentari s'explica com fer-ho.
Per automatitzar la tasca podeu afegir una línia a crontab contenint l'intèrpret de python i la ruta on volgueu posar l'script. Espero que us sigui d'utilitat.

Notes: L'editor de wordpress no permet un espaiat a l'inici de línia, així s'ha perdut la indentació necessària en el script, per això he substituït els espais en blanc per punts (.) Que heu eliminar amb un editor i substituir per espais.

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

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


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Matías va dir

    Hola, que tal?
    Em va agradar l'script, molt simple.
    Sense ànim d'ofendre, vaig fer unes modificacions perquè quedi més simple i llegible, a més de donar-li suport per Python 2 i 3 (actualment només es podia córrer en Python 2)

    Et deixo el link amb les 2 versions, per si t'interessa.
    http://linkode.org/1np9l2bi8IiD5oEkPIUQb5/Yfa4900cA76BpcTpcf4nG1

    1.    dandutrech va dir

      Estupendes modificacions i m'alegro que t'agradi l'script

  2.   nifosi va dir

    S'agraeix la intenció, però el resultat és cutre i salsitxaire.
    La meva neboda de 4 anys és capaç de fer un script mes intel·ligent i configurable que aquesta patata que has posat aquí.

    Per cert, la indentació de el codi està malament, revisa les teves bucles i no em refereixo als de cabells

    1.    dandutrech va dir

      L'script funciona perfectament, ho porto fent servir temps i, de fet, pel nombre de gent que comparteix no ha de ser tan cutre com dius. Potser hagis de trucar a la teva neboda perquè vegi si ho has posat tot correctamemte

    2.    tr va dir

      Escolta, aprèn a valorar i en lloc de criticar, corregeix, si és que tant presumeixes.

      1.    dandutrech va dir

        Exacte tr, Matias ha fet unes modificacions estupendes. Certament que l'script és millorable i d'això es tracta en el món de la col·laboració i així ho ha plasmat matias. És una pena que caminin per aquí individus com per agrir el bon ambient que ha d'imperar. Allà ells.

    3.    Abaddon s va dir

      Per ventura creus que serveix d'alguna cosa una crítica grollera i que no aporta res a l'scrip? PERQUÈ MILLOR NO ESCRIUS TU UN PUTO SCRIPT I el comparteixes !!!!!!!

  3.   Idunno va dir

    Aquí una altra versió: https://gist.github.com/Itsuki4/5acc3d03f3650719b88d
    Comenten els errors que tingui, ja ho corregiré (ara estic en windows i no ho vaig poder provar).

  4.   zetaka01 va dir

    Bé, jo faig servir rsync directament amb un script de shell, sense usar Python.
    Poso una línia per cada directori origen i destinació.
    Tinc diversos scripts depenent de el dispositiu sobre el qual faig la còpia, en el meu cas incremental.
    Per exemple, per copiar els meus llibres a un usb de 128MB que s'instal·la per defecte en
    / Mitjana / zetaka01 / Sandisk128 poso en l'script LibrosAusb128.sh la línia següent:

    rsync -Av -delete / home / zetaka01 / Llibres / mitjana / zetaka01 / Sandisk128 /

    Si no hi ha el directori destí t'ho crea i esborra de la destinació el que no estigui en l'origen, per descomptat de forma recursiva.
    Una salutació.

  5.   zetaka01 va dir

    Ah, un error de l'copy / paste -delete, amb dos guions.

    una salutació

  6.   dandutrech va dir

    Us animeu a crear una interfície gràfica? He vist les possibilitats de Tkinter i Tix però per al control d'elecció de directoris potser sigui millor Wx

  7.   zetaka01 va dir

    Ja hi ha una interfície gràfica basada en GTK, es diu Grsync.
    Deixo l'enllaç a Wikipedia, https://en.wikipedia.org/wiki/Grsync
    Una salutació.

  8.   fernando va dir

    Hola a tots. L'script pot ser una meravella o una simplicitat no ho sé ni m'importa però les coses es poden dir de mil maneres i quan es poden dir bé per què dir-les malament? Dit això he de dir que sóc usuari de linux des de 2008 i malgrat tot aquest temps sóc lent d'aprenentatge i em costa molt d'entendre moltes coses entre elles com executar un script (fàcil ja ho sé però un no dóna pa més). fer instal·lació de programes compilándolos etc etc. Per això quan he llegit que hi ha una versió amb interfície gràfica he buscat i he trobat aquesta pàgina on t'ho donen tot mastegat fins i tot. Per als maldestres com un servidor aquí la deixo. Una salutació i gràcies pel vostre esforç.
    http://www.opbyte.it/grsync/download.html

    1.    dandutrech va dir

      fernando, sense acritud alguna i si no t'importa contestar, tinc curiositat en saber per quina raó fas servir GNU / Linux. Gràcies i una salutació

  9.   zetaka01 va dir

    Bé, una interfície gràfica és molt amigable però no et dóna les opcions que et dóna una ordre complet.
    A més, no és el meu cas que ho faig a mida, un script, ja sigui de shell o de python o del que vulguis, et permet programar-lo perquè s'executi quan vulguis.
    Ah, al teu distro de linux hauries de tenir rsync i Grsync sense problemes en els repositoris.
    Una salutació.

  10.   zetaka01 va dir

    Ah Ferran, si portes des de 2008 usant linux i no saps com executar un script, no tinc paraules.
    una salutació

  11.   Gonzalo Martínez va dir

    Pa són tots enginyers de sistemes aca que critiquen el script que fa algú per col·laborar, i si usar consola / script o el que sigui?

    Quanta merda a el pet per déu.

    Administro servidors Linux fa 10 anys, i la veritat que la erecció electrònica de fer tot amb scripts es em pas fa estona, per exemple, per adminsitrar Bacula, prefereixo fer servir la interfície gràfica que el shell per fer-me l'important, que realment és mig penal .

    Un ha de ser productiu, si algú se sent més còmode fent-per interfície, bé pel, el que importa és el resultat, no com ho facis.

    En el meu treball anterior dirigia l'area d'IT d'una empresa, ia la gent que tenia a càrrec li demanava que faci alguna cosa puntual, m'interessava el resultat, no li deia «Configurame altre vhost a apatxe, usant el vaig veure sense color en una acaba de 30 × 20 », que ho faci com li quedi mes comode, si el tipus preferia fer-ho així, muntant per SFTP i usant el notepad de Windows, o resant un pare nostre, poc m'importava mentre ho faci bé.

    dandutrech, l'script compleix el seu objectiu, que és l'important, ara el que li cambiaria jo és que en comptes d'invocar la comanda des del shell, seria de cop i volta utilitzar Python-librsync, que és una llibreria per utilitzar les funcions d'rsync dins de Python.

    Amb això ganes portabilitat, l'script et corre en qualsevol ambient, sigui Linux, Windows o OS X.

  12.   DanDutrech va dir

    Gràcies, Gonzalo. El teu suggeriment crec que és molt bona i vaig a posar-la al script. una salutació