diff --git a/varios/sync_cloud b/varios/sync_cloud index 1e36d1e..8faab7f 100755 --- a/varios/sync_cloud +++ b/varios/sync_cloud @@ -1,21 +1,35 @@ #!/bin/sh -## Script para sincronizar nube remota de dropbpox +# v1.2 +# Script para sincronizar nube remota de dropbpox # Dependencias: rclone, rclonesync, dzen2 +# +# Lista de códigos de salida +# 0 - éxito +# 1 - error de dependencia +# 2 - operación exitosa, pero no se transfirieron archivos +# +# Shell: POSIX compliant +# Autor: Tuxliban Torvalds -set -e # salir del script inmediatamente cuando un comando falle + +set -u # salir si una variable no ha sido declarada ########## Verificar que las dependencias estén instaladas ########## -if ! command -v rclone; then - printf '%b' "\033[31;5m[ERROR] Instale el paquete 'rclone'\033[0m\n" -elif ! command -v rclonesync; then - git -C /tmp clone https://github.com/cjnaz/rclonesync-V2.git --depth 1 - [ -d "$HOME/.local/bin" ] || mkdir -p "$HOME/.local/bin" - cp /tmp/rclonesync-V2/rclonesync "$HOME"/.local/bin -elif ! command -v dzen2; then - printf '%b' "\033[31;5m[ERROR] Instale el paquete 'dzen2'\033[0m\n" -fi +deps() { + if ! command -v rclone; then + printf '%b' "\033[31;5m[ERROR] Instale el paquete 'rclone'\033[0m\n" + return 1 + elif ! command -v rclonesync; then + git -C /tmp clone https://github.com/cjnaz/rclonesync-V2.git --depth 1 + [ -d "$HOME/.local/bin" ] || mkdir -p "$HOME/.local/bin" + cp /tmp/rclonesync-V2/rclonesync "$HOME"/.local/bin + elif ! command -v dzen2; then + printf '%b' "\033[31;5m[ERROR] Instale el paquete 'dzen2'\033[0m\n" + return 1 + fi +} @@ -41,23 +55,25 @@ done ########## Sincronizar nube remota ########## check_diff() { - find "$HOME/Dropbox" -type f -exec md5sum {} \; > /tmp/"dropbox-$(od -N4 -tu /dev/random | awk 'NR==1 {print $2} {}')".tmp + find "$HOME/Datos/Dropbox" -type f -exec md5sum {} \; > /tmp/"dropbox-$(od -N4 -tu /dev/random | awk 'NR==1 {print $2} {}')".tmp DIFF=$(diff -q "$WORKDIR/dropbox.txt" "$TMPDIR"/dropbox-*.tmp | awk '{print $5}') if [ "$DIFF" = "differ" ]; then return 0 else - return 1 + return 2 fi } sync() { rclonesync "$HOME"/Dropbox MiDropbox: --check-access --check-filename=RCLONE_TEST \ - --filters-file "$HOME"/.config/rclone/Filtro.txt >> "$HOME"/.config/rclone/log 2>&1 + --filters-file "$HOME"/.config/rclone/Filtro.txt --rclone-args --copy-links \ + --multi-thread-streams=14 --transfers=14 >> "$HOME"/.config/rclone/log 2>&1 } first_sync() { rclonesync "$HOME"/Dropbox MiDropbox: --first-sync --check-access --check-filename=RCLONE_TEST \ - --filters-file "$HOME"/.config/rclone/Filtro.txt + --filters-file "$HOME"/.config/rclone/Filtro.txt --rclone-args --copy-links \ + --multi-thread-streams=14 --transfers=14 >> "$HOME"/.config/rclone/log 2>&1 } msg() { @@ -66,23 +82,23 @@ msg() { } - -if check_diff; then - if doas ping -c 3 -q 1.1.1.1; then - if sync; then - printf '%s\n' "Dropbox sincronizado" | msg - mv "$TMPDIR"/dropbox-*.tmp "$WORKDIR/dropbox.txt" - else - first_sync - printf '%s\n' "Dropbox sincronizado" | msg - fi - else - printf '%s\n' "No se pudo sincronizar Dropbox" "Sin conexión a internet" | msg - rm "$TMPDIR"/dropbox-*.tmp - fi -else - rm "$TMPDIR"/dropbox-*.tmp - return 0 +if deps; then + if check_diff; then + if doas ping -c 3 -q 1.1.1.1; then + if sync; then + printf '%s\n' "Dropbox sincronizado" | msg & + mv "$TMPDIR"/dropbox-*.tmp "$WORKDIR/dropbox.txt" + else + first_sync + printf '%s\n' "Dropbox sincronizado" | msg & + fi + else + printf '%s\n' "No se pudo sincronizar Dropbox" "Sin conexión a internet" | msg & + rm "$TMPDIR"/dropbox-*.tmp + fi + else + rm "$TMPDIR"/dropbox-*.tmp + fi fi exit 0