#!/usr/bin/env bash # ============================================================== # tags-report.sh — Top 20 tags de tu vault de notas # # Extrae el frontmatter de todas las notas Markdown, recopila # los tags, los cuenta y muestra un ranking ordenado por # frecuencia de uso. # # Uso: ./tags-report.sh [ruta-al-vault] # Si no se especifica ruta, usa el directorio actual. # # Dependencias: fd, yq (Mike Farah), jq # # Ejemplo: ./tags-report.sh ~/notas # ============================================================== VAULT="${1:-.}" # ─── Cabecera ──────────────────────────────────────────────────── echo "==========================================" echo " Tags Report — $(date +'%d/%m/%Y')" echo " Vault: $VAULT" echo "==========================================" echo "" # ─── Verificar herramientas ────────────────────────────────────── for cmd in fd yq jq; do if ! command -v "$cmd" &>/dev/null; then echo "[ERROR] '$cmd' no está instalado." echo " Instálalo con:" echo " - fd: sudo apt install fd-find" echo " - yq: sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && sudo chmod +x /usr/bin/yq" echo " - jq: sudo apt install jq" exit 1 fi done # ─── Pipeline principal ────────────────────────────────────────── REPORT=$(fd -e md "$VAULT" -x yq --front-matter=extract -o=json '.tags // []' 2>/dev/null \ | jq -s ' add | group_by(.) | map({tag: .[0], count: length}) | sort_by(-.count) | .[:20][] | "\(.count) \(.tag)" ' -r ) if [[ -n "$REPORT" ]]; then echo "$REPORT" else echo " ⚠️ salida vacía: revisa que yq emita JSON (-o=json) antes de jq" fi # ─── Resumen ───────────────────────────────────────────────────── echo "" TOTAL_NOTAS=$(find "$VAULT" -name '*.md' | wc -l) echo " Notas analizadas: $TOTAL_NOTAS" echo "" # ============================================================== # Notas: # # 1. '// []' es el operador default de yq: si '.tags' no existe # o es null, devuelve un array vacío en lugar de null. # # 2. '2>/dev/null' descarta errores de archivos sin frontmatter # o que no son YAML válido. # # 3. '.[:20]' limita el resultado a los 20 tags más usados. # # 4. La flag '-r' de jq produce raw output (sin comillas en # los strings), ideal para formatear la salida. # ==============================================================