{"id":527,"date":"2019-03-09T22:57:27","date_gmt":"2019-03-10T03:57:27","guid":{"rendered":"https:\/\/drmad.org\/blog\/?p=527"},"modified":"2019-03-09T23:05:52","modified_gmt":"2019-03-10T04:05:52","slug":"script-de-copias-de-respaldo-incrementales-ahora-historicos","status":"publish","type":"post","link":"https:\/\/drmad.org\/blog\/script-de-copias-de-respaldo-incrementales-ahora-historicos.html","title":{"rendered":"Script de copias de respaldo incrementales, ahora hist\u00f3ricos"},"content":{"rendered":"\n<p><a href=\"https:\/\/github.com\/drmad\/backup.py\">backup.py<\/a> es un script en <a href=\"https:\/\/python.org\">Python<\/a>  que hice para sacar copias de respaldo incrementales del contenido de los servidores locales que administro. Similar a <code>rsync<\/code>, este <em>script<\/em> copia solo los ficheros que han sido modificados desde la \u00faltima generaci\u00f3n de la copia de respaldo. A diferencia de <code>rsync<\/code>, este script <em>comprime<\/em> los ficheros al guardarlos en el destino, as\u00ed que puedes sacar copias de seguridad en un disco externo USB de menor tama\u00f1o que el disco duro del servidor.<\/p>\n\n\n\n<p>Y ahora tiene una nueva opci\u00f3n, el par\u00e1metro <code>-h<\/code>, que activa el <em>respaldo hist\u00f3rico<\/em>, cada ejecuci\u00f3n con <code>-h<\/code> genera un directorio nuevo dentro del directorio destino (por defecto usa como nombre la fecha y hora de generaci\u00f3n, todo junto) con la copia de respaldo, pero los ficheros que no han sido modificados son <a href=\"https:\/\/es.wikipedia.org\/wiki\/Enlace_duro\">enlaces duros<\/a> de la copia anterior (no ocupan m\u00e1s espacio), de tal manera que cada directorio nuevo creado tiene una copia completa de los ficheros del momento que fue ejecutado.<\/p>\n\n\n\n<p>Desc\u00e1rgalo desde <a href=\"https:\/\/github.com\/drmad\/backup.py\">https:\/\/github.com\/drmad\/backup.py<\/a>. Copia ambos .py en alg\u00fan lugar de tu PATH, y listo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">&#8211;help<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">backup.py v0.2 - Generador de copias de seguridad incrementales.<br>por Oliver Etchebarne Bejarano<br>https:\/\/drmad.org<br><br>Copia y comprime los ficheros de las rutas especificadas, preservando due\u00f1os y permisos.<br><br>backup.py [opciones] ruta [ruta..] destino<br><br>Opciones:<br>  -b         Comprime los ficheros con BZ2. Por defecto comprime con Gzip (m\u00e1s <br>             r\u00e1pido). <br>  -n         No comprime los ficheros. <br>  -f         Crea una copia completa, en vez de incremental. No es compatible con <br>             -h. <br>  -h         Crea una copia hist\u00f3rica. No es compatible con -f. <br>  -H nombre  Nombre del directorio para la copia hist\u00f3rica. De omitirse se usar\u00e1 <br>             la fecha y hora actual. <br>  -x pat     Excluye los ficheros que encajan con el patr\u00f3n de shell \"pat\". Se <br>             puede especificar varias veces. <br>  -l fich    Graba el registro de actividad completo en el fichero \"fich\". <br>  -d         Muestra mayor informaci\u00f3n en la salida est\u00e1ndar. <br>  -q         Suprime la salida de informaci\u00f3n en la salida est\u00e1ndar. <br>  -F         Fuerza a \"find\" a seguir enlaces simb\u00f3licos <br>  -g         Genera un fichero de configuraci\u00f3n con las opciones especificadas <br>             en la l\u00ednea de comandos. <br>  -c conf    Usa los par\u00e1metros almacenados en el fichero de configuraci\u00f3n <br>             \"conf\". Las opciones especificadas despu\u00e9s de esta opci\u00f3n reemplazar\u00e1n<br>             a las guardadas en el fichero. <br>  --help     Esta ayuda. <br>  --version  Versi\u00f3n de \u00e9ste script.<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>backup.py es un script en Python que hice para sacar copias de respaldo incrementales del contenido de los servidores locales<\/p>\n","protected":false},"author":1,"featured_media":531,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[29],"tags":[],"class_list":["post-527","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/drmad.org\/blog\/wp-content\/uploads\/2019\/03\/purple_motion.jpg?fit=1920%2C540&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6p3z1-8v","jetpack-related-posts":[],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/posts\/527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/comments?post=527"}],"version-history":[{"count":1,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/posts\/527\/revisions"}],"predecessor-version":[{"id":532,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/posts\/527\/revisions\/532"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/media\/531"}],"wp:attachment":[{"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/media?parent=527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/categories?post=527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/tags?post=527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}