suckless/home/.local/bin/marcadores
alejandrogs73 03e640f8a0
Copia diaria de los marcadores de Firefox en el servidor
- marcadores (home/.local/bin, desde .xinitrc): sube al servidor la copia
  de marcadores que Firefox ya guarda en el perfil. diario/ guarda 7 días
  y semanal/ una por semana, todas. Solo lo intenta con la clave SSH de
  gpg-agent desbloqueada, para no sacar pinentry, y lo reintenta cada
  hora; "marcadores ya" la sube en el momento.
- ssh: el alias server va por el dominio, así funciona también fuera de
  casa.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016UdJsHrbkmzhoCb6TthP2m
2026-09-27 23:47:29 +02:00

57 lines
2 KiB
Bash
Executable file

#!/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