Skip to content

Преобразование папок (в том числе вложенных) в теги фронт маттера в Obsidian. Скрипт на python, на go, а также скомпилированная утилита cli.

Notifications You must be signed in to change notification settings

nodeus/Obsidian-folder-tags

Repository files navigation

Obsidian-folder-tags

Папки Obsidian → теги Obsidian

Перед использованием обязательно сделайте бэкап вашего хранилища Obsidian, скрипт не предполагает отката и все изменения вносятся непосредственно в тело всех .md файлов вашего хранилища Obsidian.

Обработка разных форматов тегов:

  • Строковый формат (tags: tag1 tag2) преобразуется в список
  • Неизвестные форматы преобразуются в список строк
  • Корректная обработка существующих списков

Обработка исключительных случаев:

  • Поле tags: без значений
  • Поле tags: null в YAML
  • Строковые теги с пробелами
  • Нестандартные форматы тегов

Как запустить:

Убедитесь, что установлены зависимости:

pip install pyyaml regex

или

uv add pyyaml regex

Запустите скрипт:

python obsidian-folder-tags.py "путь/к/хранилищу" -- exclude "dir1", "dir2", "dir_n"

Например:

obsidian_folder_tags.py "f:\SyncObsidian\obsidian" --exclude template, templates, snippets

Примеры обработки разных случаев:

**Корень Obsidian**

/области жизни/
    file1.md
    file2.md
    ...
    /здоровье/
        file1.md
        file2.md
        ...

Случай 1: Пустое поле tags

---
tags:
---

После обработки:

---
tags:
  - области_жизни
  - здоровье
---

Случай 2: Строковые теги

---
tags: тег1 тег2
---

После обработки:

---
tags:
  - тег1
  - тег2
  - области_жизни
  - здоровье
---

Случай 3: Теги как None

---
tags: null
---

После обработки:

---
tags:
  - области_жизни
  - здоровье
---

Особенности реализации на Go:

  • Рекурсивная обработка всех .md файлов
  • Высокая скорость обработки
  • Детальное логгирование — полная история изменений в JSON-формате

Расширенное логгирование:

  • Основной лог: obsidian_tags.log (текстовый формат)
  • Детальный лог изменений: obsidian_tags_changes.json (JSON-формат)

В логах фиксируется:

  • Путь к файлу
  • Старые теги (если были)
  • Новые теги
  • Папка файла
  • Действие (обновление тегов/добавление фронтматтера)
  • Временная метка
  • Исключенные папки
  • Формат лога изменений (JSON):
[
  {
    "file": "/path/to/note.md",
    "old_tags": ["tag1", "tag2"],
    "new_tags": ["tag1", "tag2", "new_tag"],
    "folder": "/path/to/folder",
    "action": "updated tags",
    "datetime": "2023-10-15T12:34:56Z"
  }
]

Обработка тегов:

  • Поддержка всех форматов тегов (массив, строка)
  • Объединение без дубликатов
  • Сохранение существующих данных фронтматтера
  • Автоматическое создание фронт маттера при его отсутствии

Требования и запуск:

  • Установите Go: https://go.dev/dl/
  • Установите библиотеку YAML
  • Скомпилируйте скрипт из командной строки
go build -o obsidian-folder-tags obsidian-folder-tags.go

Или воспользуйтесь командным файлом build.bat

Использование:

Базовое использование obsidian-folder-tags.exe "/path/to/vault"

Использование с исключением:

Перечисление через запятую:

obsidian-folder-tags.exe "/path/to/vault" --exclude journal/1_daily,templates,archive

Раздельные аргументы:

obsidian-folder-tags.exe "/path/to/vault" --exclude journal/1_daily templates archive

Смешанный вариант:

obsidian-folder-tags.exe "/path/to/vault" --exclude journal/1_daily,templates archive "my other dir"

После выполнения:

  • obsidian_tags.log - основной лог
  • obsidian_tags_changes.json - детальный лог изменений

Эта реализация обеспечивает все функции оригинального Python-скрипта с добавлением детального отслеживания изменений и улучшенной производительностью.

About

Преобразование папок (в том числе вложенных) в теги фронт маттера в Obsidian. Скрипт на python, на go, а также скомпилированная утилита cli.

Topics

Resources

Stars

Watchers

Forks