Federico Mazzei / Integrando Obsidian con Hugo Automatizando mi Flujo de Publicación.

Created Sun, 22 Jun 2025 11:00:00 +0000 Modified Sun, 22 Jun 2025 11:00:00 +0000

Integrando Obsidian con Hugo: Automatizando mi Flujo de Publicación

¿Cómo gestiono mis artículos en Obsidian y los publico automáticamente en mi blog estático con Hugo?

En los últimos meses, he estado usando Obsidian como mi herramienta principal para escribir notas y borradores de artículos. Su sistema de markdown puro y enlaces bidireccionales lo hacen perfecto para organizar ideas. Pero, ¿cómo llevo ese contenido a mi blog, que está construido con Hugo?

La respuesta: automatización + scripts personalizados.


El Problema: Dos Directorios Separados

En mi flujo de trabajo tengo:

  • /mis-notas-obsidian: Donde escribo en markdown (.md) con Obsidian.

  • /mi-proyecto-hugo: La estructura del sitio web (contenido en /content/posts).

Quería:

  1. Sincronizar solo los archivos .md de Obsidian a Hugo.

  2. Mantener una estructura organizada por fecha (ej: /2023/10/mi-post.md).

  3. Evitar copiar archivos que no son posts (como notas personales o templates).


La Solución: Scripts + Rsync

Para lograrlo, creé algunos scripts (los compartí antes en este post) que hacen lo siguiente:

1. Sincronización Selectiva con Rsync

Uso rsync para copiar solo los archivos markdown desde Obsidian a Hugo, ignorando el resto:

rsync -avm --include="*/" --include="*.md" --exclude="*" --delete /mis-notas-obsidian/ /mi-proyecto-hugo/content/posts/

(Este comando mantiene la estructura de carpetas y solo pasa archivos .md).

2. Organización Automática por Fecha

Un script en Python se encarga de mover los posts a subdirectorios según su fecha de creación:

# (Código simplificado: agrupa posts en /año/mes/)

import os
import shutil
from datetime import datetime

for archivo in os.listdir("content/posts"):
    if archivo.endswith(".md"):
        fecha = datetime.fromtimestamp(os.path.getctime(archivo))
        nuevo_dir = f"content/posts/{fecha.year}/{fecha.month:02d}/"
        os.makedirs(nuevo_dir, exist_ok=True)
        shutil.move(archivo, nuevo_dir + archivo)

3. Limpieza de Archivos No Deseados

A veces tengo drafts o archivos temporales que no quiero publicar. Para evitarlo, uso:

find /mi-proyecto-hugo/content/posts -type f -not -iname "*.md" -delete

(Borra todo lo que no sea markdown).


Beneficios de Este Flujo

✅ Escritura cómoda en Obsidian (con plugins como Dataview y Templates).
✅ Publicación automática en Hugo (sin copiar/pegar manualmente).
✅ Estructura ordenada por fecha sin esfuerzo.
✅ Cero archivos residuales en el blog.


¿Por qué no usar un plugin?

Podría haber usado Obsidian-to-Hugo, pero quería control total sobre:

  • Qué archivos se copian.

  • Cómo se organizan.

  • Cuándo se ejecuta la sincronización.

Los scripts me dan esa flexibilidad.


Conclusión

Si usas Obsidian para escribir y Hugo para publicar, automatizar el proceso con scripts ahorra tiempo y reduce errores.

¿Has probado algo similar? ¡Cuéntame en los comentarios!