如题。
obsidian 里有七八百篇笔记,想迁移到思源,请问有没有什么无痛的方法。
如题。
obsidian 里有七八百篇笔记,想迁移到思源,请问有没有什么无痛的方法。
因为凑合用就行,代码比较 ugly,只能参考一下思路吧。主要做了两件事:1)处理了三种 link 形式 [[]]
![]()
[]()
,2)把所有附件都放到了 md 同目录。注意处理前先备份整个 vault。。
import sys
import re
import os
import shutil
pattern_markdown = r'\!\[[^\]]*\]\(([^\)]+)\)'
pattern_wikilink = r'\!\[\[([^\]]+)\]\]'
pattern_pdf = r'\[\[([^\]]+)\]\]'
base_path = '/Path/to/Obsidian/vault/assets'
def replace_markdown(matchobj):
orig = matchobj.group(0)
image = matchobj.group(1)
image_dir = os.path.dirname(image)
image_filename = os.path.basename(image)
image_description = ''
ext = os.path.splitext(image_filename)[1]
if ext not in ('.jpg', '.jpeg', '.png', '.gif', '.pdf', '.svg'):
if '|' in image_filename: # format [[a.png|500]]
rets = image_filename.split('|')
image_filename = rets[0]
print('image splited by | ')
else:
rets = image_filename.split()
image_filename = rets[0] # format ![](a.png "some description")
image_description = ' '.join(rets[1:])
print('image splited out description: %s.' % image_description)
orig_image = os.path.join(image_dir, image_filename)
orig_path = os.path.join(base_path, orig_image)
#dest_path = os.path.join('assets', image_filename)
dest_path = image_filename
#if not os.path.isdir('assets'):
# os.mkdir('assets')
#if image_dir:
# new_dir = os.path.join('assets', image_dir)
# if not os.path.isdir(new_dir):
# os.mkdir(new_dir)
#print('rename from %s to %s' % (orig_path, dest_path))
try:
shutil.move(orig_path, dest_path)
except:
print('failed to move %s!!!' % orig_path)
output = '![](%s)' % dest_path
if image_description:
output += '\n' + image_description
return output
def process(infile):
outlines = []
with open(infile, "r") as fp:
lcnt = 0
for line in fp:
lcnt += 1
if lcnt in (1, 2, 4): # skip front matter
continue
if line.startswith('[['):
ret = re.sub(pattern_pdf, replace_markdown, line)
else:
ret = re.sub(pattern_markdown, replace_markdown, line)
ret = re.sub(pattern_wikilink, replace_markdown, ret)
outlines.append(ret)
output = "".join(outlines)
with open(infile, "w") as fp:
fp.write(output)
if __name__ == "__main__":
infile = sys.argv[1]
process(infile)
为成为自由职业者在家办公而努力吧!
思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。
融合块、大纲和双向链接,重构你的思维。
Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。
服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。
SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。
Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。
OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。
记录并分享人生的经历。
星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。
SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。
Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。
ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。
愿逝者安息!
如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。
链滴是一个记录生活的地方。
记录生活,连接点滴
gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。
App(应用程序,Application 的缩写)一般指手机软件。
有空闲时间是接外包好呢还是学习好呢?
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。
Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。
“梦想从学习开始,事业从实践起步” —— 习近平
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于