#!/bin/sh # Copia de seguridad de los marcadores de Firefox en el servidor. # # Firefox ya guarda cada día una copia en el perfil (bookmarkbackups/*.jsonlz4) # y se restaura desde Marcadores > Administrar marcadores > Importar y # respaldar > Restaurar > Elegir archivo. Este script sube la más reciente: # diario/ una al día, se guardan las de los últimos 7 días # semanal/ la primera de cada semana, se guardan todas # # Se lanza desde .xinitrc y lo intenta cada hora hasta conseguirlo ese día. # Solo lo intenta si la clave SSH de gpg-agent ya está desbloqueada, para no # sacar pinentry al arrancar la sesión. "marcadores ya" lo sube en el momento. HOST=server DESTINO=/var/storage/PUBLIC/backup_void/marcadores MARCA=${XDG_CACHE_HOME:-$HOME/.cache}/marcadores-subidos # ¿Está desbloqueada la clave SSH? (7.º campo de KEYINFO: 1 = en caché) desbloqueada() { kg=$(grep -v '^#' "$HOME/.gnupg/sshcontrol" 2>/dev/null | awk 'NR == 1 { print $1 }') [ -n "$kg" ] && gpg-connect-agent "keyinfo $kg" /bye 2>/dev/null | awk '$1 == "S" { exit $7 != 1 }' } subir() { dir=$HOME/.config/mozilla/firefox perfil=$(sed -n 's/^Default=//p' "$dir/installs.ini" 2>/dev/null | head -1) [ -n "$perfil" ] || return 1 # Los nombres llevan la fecha: la última del orden alfabético es la más nueva ultima= for f in "$dir/$perfil"/bookmarkbackups/bookmarks-*.jsonlz4; do [ -e "$f" ] && ultima=$f done [ -n "$ultima" ] || return 1 hoy=$(date +%F) semana=$(date +%G-W%V) ssh -T -o BatchMode=yes -o ConnectTimeout=10 "$HOST" " set -e mkdir -p '$DESTINO/diario' '$DESTINO/semanal' cat > '$DESTINO/diario/marcadores-$hoy.jsonlz4' cp -n '$DESTINO/diario/marcadores-$hoy.jsonlz4' '$DESTINO/semanal/marcadores-$semana.jsonlz4' find '$DESTINO/diario' -name 'marcadores-*.jsonlz4' -mtime +6 -delete " <"$ultima" } if [ "$1" = ya ]; then subir && date +%F >"$MARCA" && echo "Marcadores subidos a $HOST:$DESTINO" exit fi while :; do if [ "$(cat "$MARCA" 2>/dev/null)" != "$(date +%F)" ] && desbloqueada && subir; then date +%F >"$MARCA" fi sleep 3600 done