116 lines
3.1 KiB
Bash
Executable File
116 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# v1.3
|
|
# Script para sincronizar nube remota de dropbpox
|
|
# Dependencias: rclone, rclonesync, dzen2
|
|
#
|
|
# Lista de códigos de salida
|
|
# 0 - éxito
|
|
# 9 - operación exitosa, pero no se transfirieron archivos
|
|
# 10 - error temporal de sincronización
|
|
# 11 - error por falta de conexión
|
|
# 12 - error de dependencia
|
|
# 13 - error no categorizado de otra manera
|
|
#
|
|
# Shell: POSIX compliant
|
|
# Autor: O. Sánchez <o-sanchez@linuxmail.org>
|
|
|
|
|
|
set -u # salir si una variable no ha sido declarada
|
|
|
|
|
|
########## Verificar que las dependencias estén instaladas ##########
|
|
|
|
deps() {
|
|
if ! command -v rclone >/dev/null; then
|
|
printf '%b' "\033[31;5m[ERROR] Instale el paquete 'rclone'\033[0m\n"
|
|
return 12
|
|
elif ! command -v dzen2 >/dev/null; then
|
|
printf '%b' "\033[31;5m[ERROR] Instale el paquete 'dzen2'\033[0m\n"
|
|
return 12
|
|
elif ! command -v rclonesync >/dev/null; then
|
|
printf '%b' "\033[31;5m[ERROR] No está disponible 'rclonesync' en el sistema. Clonado \
|
|
repositorio para instalar el ejecutable...\033[0m\n"
|
|
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
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
return 12
|
|
fi
|
|
}
|
|
|
|
|
|
########## Directorio para base de datos ##########
|
|
|
|
WORKDIR="$HOME"/.config/rclone
|
|
TMPFILE=$(mktemp /tmp/dropbox.XXXXXXXXXX)
|
|
|
|
if [ ! -f "$WORKDIR/dropbox.txt" ]; then
|
|
find "$HOME/Dropbox" -type f -exec md5sum {} \; > "$WORKDIR"/dropbox.txt
|
|
fi
|
|
|
|
|
|
########## Eliminar algún archivo residual que pudiera haber quedado ##########
|
|
|
|
for FILE in /tmp/dropbox*; do
|
|
[ -f "$FILE" ] || continue
|
|
rm "$FILE"
|
|
done
|
|
|
|
|
|
########## Sincronizar nube remota ##########
|
|
|
|
check_diff() {
|
|
find "$HOME/Datos/Dropbox" -type f -exec md5sum {} \; > "$TMPFILE"
|
|
DIFF=$(diff -q "$WORKDIR/dropbox.txt" "$TMPFILE")
|
|
if [ -z "$DIFF" ]; then
|
|
return 9
|
|
fi
|
|
}
|
|
|
|
sync() {
|
|
rclonesync "$HOME"/Dropbox MiDropbox: --check-access --check-filename=RCLONE_TEST \
|
|
--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 --rclone-args --copy-links \
|
|
--multi-thread-streams=14 --transfers=14 >> "$HOME"/.config/rclone/log 2>&1
|
|
}
|
|
|
|
msg() {
|
|
dzen2 -p 8 -e 'onstart=uncollapse' -fn 'JetBrains Mono:size=8:style=bold' -ta c \
|
|
-sa c -w 260 -x 1100 -y 25 -l 1
|
|
}
|
|
|
|
|
|
if deps; then
|
|
if check_diff; then
|
|
if doas ping -A -q -c 3 1.1.1.1; then
|
|
if sync; then
|
|
echo "Dropbox sincronizado" | msg &
|
|
mv "$TMPFILE" "$WORKDIR/dropbox.txt"
|
|
exit 0
|
|
else
|
|
first_sync
|
|
echo "Dropbox sincronizado" | msg &
|
|
exit 10
|
|
fi
|
|
elif [ "$(ping -A -q -c 3 1.1.1.1)" -eq 1 ]; then
|
|
printf '%s\n' "No se pudo sincronizar Dropbox" "Sin conexión a internet" | msg &
|
|
rm "$TMPFILE"
|
|
exit 11
|
|
else
|
|
rm "$TMPFILE"
|
|
printf '%s\n' "Ocurrieron errores" "Revisar el log" | msg &
|
|
exit 13
|
|
fi
|
|
else
|
|
rm "$TMPFILE"
|
|
exit 9
|
|
fi
|
|
fi
|
|
|
|
exit 12
|