Files
fn_registry/bash/functions/browser/backup_chrome_bookmarks.md
T
Egutierrez ae841ceedb feat(browser): CRUD de perfiles Chromium + pipeline reset_chrome_profiles
Cinco funciones nuevas (dominio browser, grupo navegator) que cierran los gaps
de gestión de perfiles, más un pipeline que las orquesta:

- backup_chrome_bookmarks / restore_chrome_bookmarks: backup y restore de los
  archivos Bookmarks (copia byte a byte verbatim para preservar el checksum
  interno; en Chromium 148 los bookmarks no están bajo el super_mac de Secure
  Preferences). Guard por user-data-dir (no global).
- delete_chrome_profile: borra la carpeta del perfil + limpia su entrada en
  Local State (info_cache, profiles_order, last_active_profiles, last_used).
- create_chrome_profile: lanza chromium headless (vía systemd-run) para que la
  managed policy instale la whitelist de extensiones, y asigna el nombre legible
  en Local State. Mata todo el árbol de chromium del udd antes de editar Local
  State (los hijos zygote/gpu no repiten --user-data-dir pero referencian la ruta).
- list_chrome_profile_extensions (Go): lista extensiones de un perfil con
  ID/name/version/location/enabled/fromPolicy. 7 unit tests.
- reset_chrome_profiles (pipeline): backup -> cerrar chromium -> delete -> create
  -> restore -> verify. Destructivo (--yes), --dry-run seguro.

Validado: unit tests Go verdes, backup/restore byte-idéntico, delete limpia Local
State, create instala la forcelist global (uBlock + web_proxy) en perfiles nuevos.
2026-06-06 01:24:21 +02:00

4.5 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path params output
backup_chrome_bookmarks function bash browser 1.0.0 impure backup_chrome_bookmarks --user-data-dir <dir> [--profile <name>]... [--backup-dir <dir>] [--dry-run] Copia byte a byte los archivos Bookmarks de perfiles Chrome/Chromium a un directorio de backup con timestamp ISO. Descubre automáticamente todos los perfiles con Bookmarks si no se especifica ninguno. Preserva el checksum interno del archivo sin parsear ni reserializar el JSON. No requiere que Chromium esté cerrado.
navegator
chromium
bookmarks
backup
browser
scraping
false error_go_core
false
bash/functions/browser/backup_chrome_bookmarks.sh
name desc
--user-data-dir (obligatorio) Ruta raíz del user-data-dir de Chrome/Chromium. Ej: ~/.config/chromium-cdp
name desc
--profile Nombre de carpeta de perfil a respaldar (repetible). Si no se pasa ninguno se descubren todos los perfiles que contengan un archivo Bookmarks, excluyendo System Profile.
name desc
--backup-dir Directorio raíz donde se crearán los backups. Default: ~/.local/share/web_scraping/bookmarks-backups
name desc
--dry-run Muestra a stderr qué archivos se copiarían y sus tamaños sin escribir nada en disco. El JSON de salida se emite igualmente.
JSON en stdout: {backup_dir: "<dir>", ts: "<YYYYMMDDTHHmmss>", profiles: [{profile: "<name>", src: "<path>", dst: "<path>", bytes: N}, ...]}. Perfiles sin Bookmarks se omiten silenciosamente. Exit 0 en éxito o dry-run. Errores a stderr con exit != 0.

Ejemplo

# Backup de todos los perfiles del chromium-cdp (descubrimiento automático)
source $HOME/fn_registry/bash/functions/browser/backup_chrome_bookmarks.sh
backup_chrome_bookmarks --user-data-dir "$HOME/.config/chromium-cdp"

# Previsualizar sin tocar nada
backup_chrome_bookmarks \
    --user-data-dir "$HOME/.config/chromium-cdp" \
    --dry-run

# Backup de perfiles específicos
backup_chrome_bookmarks \
    --user-data-dir "$HOME/.config/chromium-cdp" \
    --profile Default \
    --profile Personal \
    --profile "Profile 1"

# Backup a directorio personalizado
backup_chrome_bookmarks \
    --user-data-dir "$HOME/.config/chromium-cdp" \
    --backup-dir "$HOME/vaults/backups/bookmarks"

# Salida esperada (ejemplo):
# {"backup_dir":"/home/enmanuel/.local/share/web_scraping/bookmarks-backups","ts":"20260605T143022","profiles":[{"profile":"Default","src":"/home/enmanuel/.config/chromium-cdp/Default/Bookmarks","dst":"/home/enmanuel/.local/share/web_scraping/bookmarks-backups/20260605T143022/Default/Bookmarks","bytes":4218}]}

También ejecutable directamente con fn run:

cd $HOME/fn_registry
./fn run backup_chrome_bookmarks_bash_browser -- \
    --user-data-dir "$HOME/.config/chromium-cdp" --dry-run

Cuando usarla

Úsala antes de cualquier sesión de scraping o automatización que modifique bookmarks de Chromium, para tener un snapshot recuperable. También útil como paso previo en pipelines que reorganizan o importan marcadores masivamente. Combínala con rotate_backups_bash_infra para aplicar política de retención sobre el directorio de backups.

Gotchas

  • Copia verbatim para preservar checksum: el archivo Bookmarks de Chromium incluye un campo checksum calculado sobre el contenido. Esta función usa cp -p sin tocar el contenido — si parseases y reserializases el JSON (con jq, python3 json.dump, etc.) el checksum quedaría inválido y Chromium podría resetear o ignorar los marcadores al arrancar.
  • No requiere Chromium cerrado: a diferencia de clean_chrome_profile_extensions, esta función solo lee el archivo Bookmarks. Chromium no mantiene un lock exclusivo sobre él — la copia es segura con el navegador abierto. El archivo refleja el estado en disco en ese instante; cambios en vuelo en memoria no estarán en el backup hasta que Chromium los persista.
  • Perfiles sin Bookmarks se omiten silenciosamente: si un perfil existe pero no tiene el archivo Bookmarks (perfil recién creado sin haber abierto el navegador), se salta sin error. Solo aparece en el JSON de salida si fue respaldado.
  • System Profile excluido siempre: el perfil System Profile es un perfil interno de Chromium sin datos de usuario y se excluye del descubrimiento automático.
  • Sin jq ni python3: la emisión del JSON de salida se construye con printf de bash puro, sin dependencias externas.