Nextcloud-Notizen automatisiert in DokuWiki veröffentlichen

Markdown zu DokuWiki: Automatische Konvertierung aus Nextcloud-Notizen

Nextcloud-Notizen automatisiert in DokuWiki veröffentlichen
Photo by Carl Heyerdahl / Unsplash

Ich habe ein Bash-Skript entwickelt, das per Cronjob Markdown-Dateien aus einem bestimmten Verzeichnis meiner Nextcloud in das DokuWiki-Format konvertiert und in das entsprechende Verzeichnis für meine DokuWiki kopiert.

Meine Notizen in der Nextcloud

Als Basis für meine DokuWiki habe ich meine in Markdown verfassten Notizen verwendet, welche in meiner Nextcloud gespeichert sind.

Nextcloud mit lokaler KI
Volle Kontrolle über die eigenen Daten in der eigenen Cloud trotz Auswertung durch KI

Diese Notizen waren das Ergebnis meiner kontinuierlichen Bemühungen, mein Wissen zu strukturieren und zugänglich zu machen. Durch die Nutzung von Obsidian als Editor und der Synchronisation mit der Nextcloud hatte ich eine effiziente Methode gefunden, meine Gedanken und Erkenntnisse festzuhalten.

Obsidian mit KI denkt beim Schreiben mit
KI schlägt die nächsten zwei Sätze während des Schreibens vor…

Hierzu gibt es auch einen Artikel, der beschreibt, wie ich meine Notizen in Obsidian mit KI-Unterstützung erstelle.

Das Bash-Skript zur Konvertierung

Ich habe ein Bash-Skript geschrieben, um die Konvertierung meiner Markdown-Notizen in das DokuWiki-Format zu automatisieren. Das Skript durchläuft alle .md-Dateien im angegebenen Quellverzeichnis meiner Nextcloud, konvertiert sie mittels Pandoc in das DokuWiki-Format und speichert sie im Zielverzeichnis meiner DokuWiki-Installation. Dabei habe ich besonders auf die korrekte Abbildung der Verzeichnisstruktur und die Behandlung von Sonderzeichen geachtet.

Hier ist das vollständige Skript:

#!/bin/bash

# Basisverzeichnis definieren
INPUT_DIR="/mnt/NextcloudData/michael/files/Notizen/Wiki/"                 # Quellverzeichnis mit .md-Dateien
OUTPUT_DIR="/var/docker/web/dokuwiki/config/dokuwiki/data/pages/michael"   # Zielverzeichnis für DokuWiki-Dateien

# Sicherstellen, dass das Zielverzeichnis existiert und leer ist
mkdir -p "$OUTPUT_DIR"
rm -rf "$OUTPUT_DIR/*"

find "$INPUT_DIR" -type f -name "*.md" -print0 | while IFS= read -r -d '' file; do
    # Relative Pfad ermitteln
    outputfile="$(echo ${file#$INPUT_DIR} | sed -E -e 's/ /_/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ß/ss/g;s/.*/\L&/;s/\.md$/\.txt/')"
    
    # Pfad für die Zieldatei zusammenstellen (Sicherstellen, dass keine doppelten Slashes entstehen)
    mkdir -p "$(dirname "$OUTPUT_DIR/$outputfile")"

    # Datei konvertieren
    echo "Konvertiere: $file -> $OUTPUT_DIR/$outputfile"
    pandoc "$file" -f markdown -t dokuwiki -o "$OUTPUT_DIR/$outputfile"
done

docker restart dokuwiki

Wichtige Schritte im Skript

  1. Definition der Verzeichnisse: Im Skript habe ich die Variablen INPUT_DIR und OUTPUT_DIR definiert. INPUT_DIR verweist auf das Verzeichnis in meiner Nextcloud, in dem die Markdown-Notizen gespeichert sind. OUTPUT_DIR gibt das Verzeichnis an, in dem die konvertierten Dateien für DokuWiki abgelegt werden sollen.
  2. Sicherstellung eines leeren Zielverzeichnisses: Zu Beginn des Skripts habe ich sichergestellt, dass das Zielverzeichnis existiert und leer ist. Dies habe ich mit den Befehlen mkdir -p "$OUTPUT_DIR" und rm -rf "$OUTPUT_DIR/*" erreicht, falls dort noch alte Dateien liegen sollten.
  3. Durchlaufen der Markdown-Dateien: Mit dem Befehl find "$INPUT_DIR" -type f -name "*.md" -print0 habe ich alle Markdown-Dateien im Quellverzeichnis gesucht und verarbeitet.
  4. Konvertierung und Sonderzeichenbehandlung: Ich habe den relativen Pfad jeder gefundenen Datei ermittelt und Sonderzeichen sowie Leerzeichen durch Unterstriche ersetzt. Außerdem habe ich die Dateiendung von .md in .txt geändert, um die Kompatibilität mit DokuWiki zu gewährleisten. Dies habe ich mit sed und regulären Ausdrücken erreicht.
  5. Erstellung der Zielverzeichnisstruktur: Mit mkdir -p "$(dirname "$OUTPUT_DIR/$outputfile")" habe ich sichergestellt, dass die notwendige Verzeichnisstruktur im Zielverzeichnis erstellt wird, falls sie noch nicht vorhanden war.
  6. Konvertierung mit Pandoc: Der Befehl pandoc "$file" -f markdown -t dokuwiki -o "$OUTPUT_DIR/$outputfile" konvertiert die Markdown-Dateien in das DokuWiki-Format.
  7. Neustart des DokuWiki-Containers: Abschließend habe ich den DokuWiki-Docker-Container neu gestartet, um die Änderungen zu übernehmen.

Danach befinden sich die Notizen im korrekten Format im Verzeichnis meiner Dokuwiki:

Installation und Konfiguration von Pandoc

Pandoc ist eines der genialsten Tools, wenn es um die Formatumwandlung zwischen verschiedenen Dokumententypen geht.

Um das Skript ausführen zu können, muss es auf dem System installiert sein. Die Installation von Pandoc unter Linux ist unkompliziert. Auf einem Debian-basierten System, wie zum Beispiel Ubuntu, kann Pandoc mit folgendem Befehl installiert werden:

Nala. Paket-Management mit History
Paketmanagement mit Sicherheits-Netz. Einmal probiert - nie wieder ohne!
sudo nala install pandoc

Nach der Installation kann die korrekte Funktionsweise von Pandoc mit folgendem Befehl überprüft werden:

pandoc --version

Dieser Befehl gibt die installierte Version von Pandoc aus.

Nutzung der Nextcloud als zentrale Datenbasis

Die Entscheidung, meine Notizen in der Nextcloud zu speichern, basiert auf dem Wunsch nach einer zentralen und sicheren Datenhaltung. Die Nextcloud bietet nicht nur die Möglichkeit, Dateien zu synchronisieren und zu teilen, sondern auch die Integration von Apps wie "Notes", die ein einfaches Erstellen und Bearbeiten von Markdown-Dateien ermöglicht. In einem früheren Blog-Beitrag habe ich beschrieben, wie die lokale KI in der Nextcloud installiert und konfiguriert werden kann. So kann ich auch unterwegs am Smartphone sogar per Spracherkennung Notizen erstellen, die gleichzeitig auch Beiträge in der Dokuwiki sind.

Unterwegs per Spracheingabe Notizen, Dokuwiki- oder Blog-Beiträge erstellen

Da ich nur Dokumente unterhalb des Ordners wiki übertrage, kann ich leicht persönliche und öffentliche Dokumente trennen. Zusätzlich ist meine Dokuwiki als privat eingerichtet. So erhalten nur Personen Zugriff, denen ich einen Account freigeschaltet habe. Auf diese Weise ist eine granulare Rechteverwaltung garantiert.

Fazit

Durch die Automatisierung der Konvertierung meiner Markdown-Notizen in das DokuWiki-Format habe ich einen effizienten Weg gefunden, mein Wissen zentral zu verwalten und zugänglich zu machen, wo ich es wünsche. Das entwickelte Bash-Skript ermöglicht es, die Notizen aus meiner Nextcloud direkt in meine DokuWiki zu integrieren.

Später folgt möglicherweise die Integration lokaler KI, um zum Beispiel persönliche Informationen zu entfernen sobald Dokumente veröffentlicht werden...