Converting obsidian to logseq (org mode)?

Hey!

I’ve been using Obsidian but I am now ready to move over and use Logseq together with emacs org mode. Does anyone know of any decent way of converting obsidian’s markdown files to logseq with org mode?

Have you tried pandoc?

for f in `ls *.md`; do 
  pandoc -f markdown -t org -o ${f}.org ${f}; 
done

Hi, it’s a start. but I noticed that it doesn’t convert page references, so [[these remain the same]]. I’m not sure if it’s a problem with logseq, but the ideal would be to have it in the org format [[link][name]].

There is a setting you can use in config.edn to change this for the future. It’s under the key :org-mode/insert-file-link?, you want to change that to true.

You could convert those links pretty quickly with a small script. I take no responsibility for any data loss. Please check the output carefully before uncommenting the lines that write the file! I haven’t personally used this script.

#!/usr/bin/env python3

import os
import re


def check_and_replace_links(directory, text):
    def replace_link(match):
        link_text = match.group(1)
        link_path_pages = os.path.join(pages_directory, link_text + ".org")
        link_path_journals = os.path.join(journals_directory, link_text + ".org")

        if os.path.exists(link_path_pages):
            return f"[[file:{link_path_pages}][{link_text}]]"
        if os.path.exists(link_path_journals):
            return f"[[file:{link_path_journals}][{link_text}]]"

        return match.group(0)

    pattern = r"\[\[(.*?)\]\]"
    replaced_text = re.sub(pattern, replace_link, text)
    return replaced_text


def process_file(file_path):
    with open(file_path, "r") as file:
        content = file.read()
        updated_content = check_and_replace_links(os.path.dirname(file_path), content)

    ## For now just print the content
    print(updated_content)

    ## Write the files at your own risk
    # with open(file_path, "w") as file:
    #     file.write(updated_content)


if __name__ == "__main__":
    pages_directory = os.path.join(os.getcwd(), "pages")
    journals_directory = os.path.join(os.getcwd(), "journals")

    for root, _, filenames in os.walk(pages_directory):
        for filename in filenames:
            if filename.endswith(".org"):
                file_path = os.path.join(root, filename)
                process_file(file_path)

    for root, _, filenames in os.walk(journals_directory):
        for filename in filenames:
            if filename.endswith(".org"):
                file_path = os.path.join(root, filename)
                process_file(file_path)

The script assumes you are in the base logseq directory. That is, one directory above pages and journals.