Es gibt verschiedene Tools, um die Inhalte eines DokuWiki von dessen eigener Syntax nach Markdown zu konvertieren, welches in Hugo verwendet wird. Die Auswertung davon gibt es hier.

Ich habe mich für Pandoc entschieden.

Export mit Hilfe von Pandoc#

Der grundsätzliche Aufruf für den Export via Pandoc ist:

find path/to/pages/ -iname "*.txt" -exec pandoc --wrap=none -s --from=dokuwiki --to=gfm -o "{}.md" '{}' \;

Der Parameter --wrap=none ist wichtig, weil sonst Zeilen immer nach 72 Zeichen einen Zeilenumbruch bekommen. Dokumentation hierzu siehe hier im Bereich “wrap”.

Die erstellten .md-Dateien liegen jetzt immer an der selben Stelle wo auch die .txt-Datien liegen.

hinweis

Man benötigt eine Pandoc-Version ab mindestens 2.11.3, da sonst Interwiki-Links durch Links zu Google ersetzt werden. Siehe im Bereich “Dokuwiki reader” der Release Notes von Pandoc.

Da es in Debian selbst in Unstable nur Version 2.9 gibt, kann man manuell die neueste Version installieren, siehe hier.

.txt-Dateien löschen#

Die alten .txt-Dateien können jetzt gelöscht werden mit:

find path/to/pages/ -name "*.txt" -execdir rm '{}' \;

Front Matter#

Damit Dateien überhaupt in Hugo gerendert werden, müssen sie ein rudimentäres Front Matter haben, das zumindest z. B. den Titel enthält:

---
title: Müllsammeln
---

Für das Hinzufügen dieses rudimentären Front Matters (mit dem Dateinamen als Titel) habe ich das Script von hier angepasst und hinzugefügt, dass auch die erste H1-Überschrift in jeder Datei entfernt wird, da Hugo diese beim Rendern der Website automatisch aus dem titel: generiert. Zusätzlich wird noch das .txt aus den Dateinamen entfernt.

#!/bin/bash

filepath="$1" #path/to/filename.md
file_name=$(basename $filepath) #filename.md

md='.txt.md'
title=${file_name%$md} #filname
newname="${title}.md" #filename.md

TEMPLATE="---
title: $title
---

# Remove first line of file (with # Title)
sed -i '1d' "${filepath}"

echo "$TEMPLATE" | cat - "$filepath" > temp && mv temp "${filepath%$md}.md"
rm ${filepath}

Der Aufruf ist:

find pages/ -name "*.md" -print0 | xargs -0 -I file path/to/prepend.sh file

Fertig#

Im Ergebnis erhält man die komplette Verzeichnisstruktur eines DokuWiki mit Dateien im Markdown-Format.

Zusätzlich benötigt man aber noch die Medien-Dateien (Fotos, Screenshots, Videos, usw.) aus dem DokuWiki.

Verzeichnisstruktur der .md-Dateien#

Hier ein Auszug aus der Verzeichnisstruktur meines exportierten Wikis:

.
└── pages
    […]
    ├── sport
    │   ├── fahrrad
    │   │   ├── hunde.md
    │   │   ├── kleidung
    │   │   │   ├── armlinge_und_beinlinge.md
    │   │   │   ├── baselayer.md
    │   │   │   ├── handschuhe.md
    │   │   │   ├── hose.md
    │   │   │   ├── lenkerstulpen
    │   │   │   │   ├── 45nrth.md
    │   │   │   │   └── einfache_variante.md
    │   │   │   ├── lenkerstulpen.md
    │   │   │   ├── schuhe.md
    │   │   │   ├── sicherheitsweste.md
    […]

Verzeichnisstruktur der Medien-Dateien#

Zusätzlich benötigt man natürlich noch die Dateien aus media/.

Auch hier ein Auszug aus den entsprechenden Verzeichnissen meines alten Wikis:

    […]
├─ sport
│   └── fahrrad
│       ├── 2019-06_kamera_befestigung_am_rueckspiegel_1.jpeg
│       ├── 2019-06_kamera_befestigung_am_rueckspiegel_2.jpeg
│       ├── 2020-07_kamera_setup_vorne_1.jpg
│       ├── 2020-07_kamera_setup_vorne_2.jpg
│       ├── 2020-07_kamera_setup_vorne_3.jpg
│       ├── 2020-12_kamerabefestigung_lenkertaschenhalter_01.jpg
        […]