Convertir espacios
Los comandos space convert exportan un espacio completo de Confluence, con todas sus páginas, a un directorio de archivos Markdown. La jerarquia de páginas se conserva automáticamente como subdirectorios anidados.
Este es el flujo operativo principal de acs2md y la razón principal por la que la mayoria de equipos licencia el producto.
Si estás preparando una ejecución real con cliente, consulta Flujos y comandos para patrones de continuidad, archivo, migración, gobernanza y generación de corpus para IA.
Convertir por clave
acs2md space convert by-key SPACE_KEY [flags]La clave del espacio es el identificador corto visible en la URL de Confluence: .../wiki/spaces/MYSPACE/. También aparece en la salida de acs2md space list.
Ejemplos
# Convierte al directorio de salida predeterminado
acs2md space convert by-key MYSPACE
# Convierte a un directorio concreto
acs2md space convert by-key MYSPACE --output-dir ./docs
# Construye una base de conocimiento RAG, texto plano sin imagenes
acs2md space convert by-key MYSPACE \
--exclude-marks=true \
--embed-images=false \
--output-dir ./rag-knowledge-base
# Incluye solo páginas publicadas actualmente
acs2md space convert by-key MYSPACE --status current --output-dir ./docs
# Desactiva la reescritura de enlaces internos
acs2md space convert by-key MYSPACE --rewrite-links=false --output-dir ./site
# Sincronización incremental: solo reconvierte páginas cambiadas y conserva archivos eliminados
acs2md space convert by-key MYSPACE --incremental --output-dir ./docs
# Sincronización completa: reconvierte páginas cambiadas y elimina archivos de páginas retiradas
acs2md space convert by-key MYSPACE --sync --output-dir ./docsFlags
| Flag | Short | Predeterminado | Descripcion |
|---|---|---|---|
--output-dir | -o | ./output/<SPACE_KEY>/ | Directorio donde escribir los archivos Markdown |
--status | -s | current | Filtra páginas por estado: current, archived, trashed, deleted, draft |
--conflict-resolution | overwrite | Como gestionar conflictos de nombres de archivo: overwrite, suffix, skip, versioned | |
--rewrite-links | true | Reescribe URLs internas de Confluence a rutas relativas locales | |
--sync | false | Mantiene .convert-sync-state.json y solo reconvierte páginas cambiadas. Elimina archivos locales de páginas retiradas de Confluence. Mutuamente excluyente con --incremental. | |
--incremental | true | Igual que --sync, pero conserva archivos locales de páginas retiradas. Mutuamente excluyente con --sync. |
Convertir por ID
acs2md space convert by-id SPACE_ID [flags]Convierte un espacio identificado por su ID numerico en lugar de su clave. Usa los mismos flags que by-key.
acs2md space convert by-id 65539 --output-dir ./docsFlags de conversion
Estos flags están disponibles tanto en by-key como en by-id y controlan como se renderiza cada página.
Contenido y metadatos
| Flag | Short | Predeterminado | Descripcion |
|---|---|---|---|
--include-metadata | -m | true | Anade un bloque YAML front matter a cada archivo (título, autor, fechas de creación/modificacion) |
--exclude-marks | -x | true | Elimina todo el formato en linea: negrita, cursiva, subrayado y colores. Usa --exclude-marks=false si quieres conservar formato enriquecido. |
Imagenes y multimedia
| Flag | Short | Predeterminado | Descripcion |
|---|---|---|---|
--embed-images | -e | true | Incrusta imagenes como URI de datos base64 |
--ext-embed-drawio | -D | true | Incrusta diagramas de draw.io como imagenes base64 |
--ext-embed-roadmap | true | Incrusta diagramas de Roadmap Planner como imagenes base64 | |
--embed-media-images | true | Incrusta archivos multimedia de Confluence (imagenes, avatares) como URI de datos base64 |
Usa --embed-images=false para mantener las referencias de imagen como URLs
externas. Esto genera archivos de salida mas pequenos, pero requiere acceso a
red para visualizarlos.
Flags de extension
| Flag | Predeterminado | Descripcion |
|---|---|---|
--ext-render-toc | true | Genera una tabla de contenidos Markdown a partir de los encabezados del documento |
--ext-render-recently-updated | true | Convierte la macro recently-updated en una lista Markdown |
--ext-render-listlabels | true | Convierte insignias de etiquetas |
--ext-render-pagetree | true | Convierte la macro pagetree en una lista Markdown anidada |
--ext-render-children | true | Convierte la macro children en una lista Markdown plana |
--ext-render-contributors | true | Convierte la macro contributors en una lista Markdown |
--ext-render-page-signatures | true | Convierte tablas de firmas de Document Control |
--ext-render-qc-properties | true | Convierte las macros de propiedades y revision QC con sus valores reales |
--ext-render-task-report | true | Convierte tasks-report-macro en una tabla Markdown |
--ext-render-content-report | true | Convierte content-report-table macro en una tabla Markdown |
--ext-resolve-inline-card-titles | true | Resuelve enlaces de tarjetas inline a sus títulos reales de página |
Reporte de progreso
Las conversiones largas muestran una barra de progreso en tiempo real en stderr con el título actual de la página, el porcentaje completado y el tiempo estimado restante. Esto no interfiere con la salida en stdout que pueda redirigirse a un archivo.
Esa separacion es importante para la automatizacion porque mantiene visibilidad del progreso para humanos sin corromper la salida redirigida.
Si necesitas una transcripcion limpia para CI, demos o capturas de documentación, usa el flag global --no-progress.
Ejecución observada de conversion (anonimizada)
La siguiente salida se capturo de una ejecución real en macOS contra un espacio pequeno y actual, con el nombre y la clave del espacio anonimizados:
📚 Converting space: Team Documentation (TEAMDOCS)
📂 Output directory: /tmp/acs2md-doc-sample
🔄 Mode: incremental — state file: /tmp/acs2md-doc-sample/.convert-sync-state.json
🔍 Fetching page metadata for sync...
📥 Fetched metadata for 6 pages ✅
📋 Found 6 page(s) to convert (0 up-to-date)
✅ Sync complete!
✅ Converted: 6
❌ Failed: 0
✅ Up-to-date (skipped): 0
🗑️ Removed from tracking: 0
🔗 Links rewritten: 1 files
📂 Output: /tmp/acs2md-doc-sampleUna segunda ejecución contra el mismo directorio de salida produjo:
📚 Converting space: Team Documentation (TEAMDOCS)
📂 Output directory: /tmp/acs2md-doc-sample
🔄 Mode: incremental — state file: /tmp/acs2md-doc-sample/.convert-sync-state.json
🔍 Fetching page metadata for sync...
📥 Fetched metadata for 6 pages ✅
✅ All pages are up-to-date.
✅ Sync complete!
✅ Up-to-date (skipped): 6
🗑️ Removed from tracking: 0
📂 Output: /tmp/acs2md-doc-sampleFlujos que combinan espacios y páginas
acs2md también incluye comandos a nivel de página para que los equipos combinen exportación masiva con inspección dirigida desde el mismo binario.
acs2md page convert by-id,by-title,by-urlacs2md page get by-id,by-title,by-urlacs2md page count nodes,page count marksypage properties
Estructura de salida
acs2md crea subdirectorios que reflejan el árbol de páginas de Confluence. Cada página se convierte en un archivo Markdown y las páginas hijas se colocan dentro de una carpeta con el nombre de su página padre.
./output/TEAMDOCS/
├── .convert-sync-state.json
├── Team_Documentation.md
└── Team_Documentation/
├── Architecture_decisions.md
├── Change_log.md
├── Meeting_notes.md
├── Product_requirements.md
└── Retrospectives.mdLos nombres de archivo se derivan de los títulos de página y los conflictos se resuelven usando la estrategia de --conflict-resolution.
Que el archivo Markdown raiz y la carpeta hija compartan el mismo título de página no es teorico; esa estructura salio directamente de una exportación real.
Resolucion de conflictos de salida
Cuando dos páginas del espacio generan el mismo nombre de archivo, --conflict-resolution controla el comportamiento:
| Valor | Comportamiento |
|---|---|
overwrite | Sobrescribe cualquier archivo existente (predeterminado) |
suffix | Anade el ID de página para desambiguar nombres de archivo duplicados |
skip | Conserva el archivo existente y omite el duplicado |
versioned | Crea un directorio de salida con marca temporal para cada ejecución |
Modo sync e incremental
En la versión actual documentada, acs2md space convert by-key se observo arrancando en modo incremental cuando no se pasa ni --incremental ni --sync. La herramienta rastrea versiones de página en un archivo .convert-sync-state.json dentro del directorio de salida y solo reconvierte páginas que han cambiado desde la ultima ejecución.
| Flag | Comportamiento |
|---|---|
--sync | Reconvierte páginas cambiadas. Elimina archivos locales de páginas retiradas de Confluence. |
--incremental | Reconvierte páginas cambiadas. Conserva archivos locales de páginas retiradas de Confluence. Este fue el comportamiento observado por defecto en v1.0.0. |
Los dos flags son mutuamente excluyentes.
Los modos sync e incremental son ideales para pipelines de CI/CD y exportaciones programadas. En ejecuciones posteriores, solo se recuperan y convierten páginas con versiones nuevas, lo que reduce de forma notable las llamadas a la API y el tiempo de proceso.
Archivo de estado de ejemplo
El archivo de estado creado por la exportación real tenia esta forma tras anonimizarlo:
{
"last_sync_at": "2026-03-29T10:55:33.744109+02:00",
"pages": {
"100101": {
"converted_at": "2026-03-29T10:55:31.313290+02:00",
"version_created_at": "2024-01-15T09:00:00.000Z",
"page_id": "100101",
"title": "Team Documentation",
"file_path": "/tmp/acs2md-doc-sample/Team_Documentation.md",
"version_number": 3
}
},
"space_id": "100001",
"version": 1
}Patrones de uso recomendados
- Usa
--synccuando el directorio de salida deba permanecer como un espejo exacto y vivo del espacio de origen. - Usa
--incrementalcuando quieras una copia de continuidad o de archivo que conserve contenido eliminado localmente. - Usa
--rewrite-links=falsesolo cuando no necesites portabilidad local. - Ejecuta
space pages --treeantes de la primera exportación grande si necesitas validar el alcance con stakeholders.
Ejemplos practicos
Migración completa de un espacio a un sitio estatico
acs2md space convert by-key DOCS \
--include-metadata \
--output-dir ./site/docsBase de conocimiento para IA (texto plano, sin imagenes)
acs2md space convert by-key KB \
--exclude-marks \
--embed-images=false \
--ext-render-toc=false \
--output-dir ./ragBackup nocturno mediante CI/CD
#!/bin/bash
export ACS2MD_CONFLUENCE_DOMAIN=mycompany.atlassian.net
export ACS2MD_CONFLUENCE_USERNAME=$CONFLUENCE_USER
export ACS2MD_CONFLUENCE_API_TOKEN=$CONFLUENCE_TOKEN
acs2md space convert by-key DOCS \
--output-dir "./backup/$(date +%Y-%m-%d)" \
--log-file acs2md.logSincronización incremental en CI/CD
# Solo reconvierte páginas cambiadas y conserva archivos de páginas retiradas
acs2md space convert by-key DOCS \
--incremental \
--output-dir ./docs
# Solo reconvierte páginas cambiadas y elimina archivos de páginas retiradas
acs2md space convert by-key DOCS \
--sync \
--output-dir ./docsExportación orientada a archivo que conserva páginas retiradas
acs2md space convert by-key DOCS \
--incremental \
--output-dir ./archive/docsExportación sin reescritura de enlaces
# Conserva las URLs originales de Confluence en lugar de reescribirlas a rutas locales
acs2md space convert by-key MYSPACE \
--rewrite-links=false \
--output-dir ./exportPara orientación por escenarios en lugar de comandos individuales, sigue con Flujos y comandos.