Ostatnio aktywny 1 week ago

Top 20 tags de tu vault de notas Markdown — fd + yq + jq (episodio 838)

atareao's Avatar atareao zrewidował ten Gist 1 week ago. Przejdź do rewizji

1 file changed, 74 insertions

tags-report.sh(stworzono plik)

@@ -0,0 +1,74 @@
1 + #!/usr/bin/env bash
2 + # ==============================================================
3 + # tags-report.sh — Top 20 tags de tu vault de notas
4 + #
5 + # Extrae el frontmatter de todas las notas Markdown, recopila
6 + # los tags, los cuenta y muestra un ranking ordenado por
7 + # frecuencia de uso.
8 + #
9 + # Uso: ./tags-report.sh [ruta-al-vault]
10 + # Si no se especifica ruta, usa el directorio actual.
11 + #
12 + # Dependencias: fd, yq (Mike Farah), jq
13 + #
14 + # Ejemplo: ./tags-report.sh ~/notas
15 + # ==============================================================
16 +
17 + VAULT="${1:-.}"
18 +
19 + # ─── Cabecera ────────────────────────────────────────────────────
20 + echo "=========================================="
21 + echo " Tags Report — $(date +'%d/%m/%Y')"
22 + echo " Vault: $VAULT"
23 + echo "=========================================="
24 + echo ""
25 +
26 + # ─── Verificar herramientas ──────────────────────────────────────
27 + for cmd in fd yq jq; do
28 + if ! command -v "$cmd" &>/dev/null; then
29 + echo "[ERROR] '$cmd' no está instalado."
30 + echo " Instálalo con:"
31 + echo " - fd: sudo apt install fd-find"
32 + 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"
33 + echo " - jq: sudo apt install jq"
34 + exit 1
35 + fi
36 + done
37 +
38 + # ─── Pipeline principal ──────────────────────────────────────────
39 + REPORT=$(fd -e md "$VAULT" -x yq --front-matter=extract -o=json '.tags // []' 2>/dev/null \
40 + | jq -s '
41 + add
42 + | group_by(.)
43 + | map({tag: .[0], count: length})
44 + | sort_by(-.count)
45 + | .[:20][]
46 + | "\(.count) \(.tag)"
47 + ' -r
48 + )
49 + if [[ -n "$REPORT" ]]; then
50 + echo "$REPORT"
51 + else
52 + echo " ⚠️ salida vacía: revisa que yq emita JSON (-o=json) antes de jq"
53 + fi
54 +
55 + # ─── Resumen ─────────────────────────────────────────────────────
56 + echo ""
57 + TOTAL_NOTAS=$(find "$VAULT" -name '*.md' | wc -l)
58 + echo " Notas analizadas: $TOTAL_NOTAS"
59 + echo ""
60 +
61 + # ==============================================================
62 + # Notas:
63 + #
64 + # 1. '// []' es el operador default de yq: si '.tags' no existe
65 + # o es null, devuelve un array vacío en lugar de null.
66 + #
67 + # 2. '2>/dev/null' descarta errores de archivos sin frontmatter
68 + # o que no son YAML válido.
69 + #
70 + # 3. '.[:20]' limita el resultado a los 20 tags más usados.
71 + #
72 + # 4. La flag '-r' de jq produce raw output (sin comillas en
73 + # los strings), ideal para formatear la salida.
74 + # ==============================================================
Nowsze Starsze