El objetivo de este script es el de hacer un backup de una carpeta de google Drive a otra carpeta de Google drive de Backup.
La idea es trabajar con Google Drive y mantener un backup (tb en google drive por la cantidad de datos) de manera que los backups sean incrementales y pueda recuperar versiones anteriores de archivos de forma fácil.
Si uso windows y "mapeo" la unidad de google al ordenador, un potencial virus podria cifrar el contenido de la carpeta de google, por lo que requiero de un backup donde mi ordenador no tenga acceso.
Con rclone se pueden sincronizar carpetas y además almacenar los cambios en subcarpetas, asi que perfecto:
#!/bin/bash ######################################### # Script de backups ######################################### ######################## # COLORS ######################## green="\e[42m" blue="\e[1;34m" red="\e[31m" bold="\e[1m" end="\e[0m" ######################## # Google Drive ######################## GD_Control_Versiones() { local remote="$1" local num_versions=30 local versions=( $(rclone lsd $remote | cut -d '-' -f 5 | cut -d ' ' -f 2 | grep -e '^20' | sort -r | xargs) ) local versions_to_remove=( ${versions[@]:$num_versions:100} ) echo -e "\tControl de versiones de $remote" echo -e "\t\tVersiones encontradas: ${versions[@]}" echo -e "\t\tVersiones a eliminar: ${versions_to_remove[@]}" for v in ${versions_to_remove[@]}; do echo -e "\t\tEliminando $v" rclone purge $remote/$v done } Help() { # mostrar la ayuda echo "Script para sincronizar incrementalmente carpetas de google drive" echo "configuradas en rclone." echo echo "Parametros requeridos:" echo -e "-h \t Ayuda" echo -e "-o \t Origen (remote de rclone)" echo -e "-d \t Destino (remote de rclone)" echo -e "-r \t Listar unidades remotas de rclone" echo } #fecha actual para mantener la versiona anterior de los ficheros modificados hoy fecha_actual=$(date +%Y%m%d) # Recogida de parametros while getopts "hro:d:" option; do case $option in h) Help ; exit 0 ;; r) echo "Listando unidades remotas:"; echo; rclone listremotes; exit 0;; o) ORIGEN=$OPTARG ;; d) DESTINO=$OPTARG ;; \?) exit -1 ;; :) exit -1 ;; esac done if [ -z $ORIGEN ] || [ -z $DESTINO ]; then echo -e "${bold}${red}ERROR: no se ha definido el origen o destino.${end}" echo Help exit -1 fi # Copia de origen a destino y control de versiones (borrado de modificaciones viejas) TMP=$(mktemp) echo -e "[+] $fecha_actual [+] Copiando Google Drive: $ORIGEN a $DESTINO" rclone -v --drive-server-side-across-configs sync $ORIGEN $DESTINO/current --backup-dir $DESTINO/$fecha_actual 2> $TMP && cat $TMP | paste /dev/null - && rm -f $TMP GD_Control_Versiones $DESTINO
Comentarios