整理一下我自己的 obsidian知识库公开部分迁移、图片上传、链接修正部分内容。
知识库部分迁移
使用知识库做记录的时间不多,我自己的知识库是相当乱的!这样的话就容易出现这样的情况:
最终需要的文件夹结构可能来自于多个不同文件夹中的内容
quartz
在创建的时候会有3个选项,其中一个就是符号链接你需要的文件夹。这个确实是给了我灵感,于是我也用相同的方式,使用ubuntu 的符号链接链接我需要的文件夹,将其放入 content
文件夹内。
这时候又有另一个问题:
知识库中通过双链链接资源文件,而站点中的资源文件应该向对象存储请求
也就是说,我不能直接使用符号链接来链接我的文件,而是需要将其原文件修改、文中的双链都需要改用常规 markdown 语法
,并且资源链接指向 对象存储OSS
中。
为此,我在我自己的知识库中的顶层文件夹中新增了一个 release
文件夹,并且将需要上传的文件夹的符号链接放进去~这样知识库迁移只需要用脚本遍历知识库的 release
文件夹就能够做到了!
要支持符号链接的话,需要在 os.walk()
中添加参数 followlinks=True
图片上传
考虑到我的图片引用有些是相对根路径,有些是最短路径,这里获取一下文件的最短路径和相对根路径
上面已经拿到了所有需要的公开的文件,我们需要的是在文件中找到所有双链部分,将指向资源文件的部分上传。
嘛,主要是不希望公开的资源和自己私有的资源混合在一起
将资源上传以后,复制文件。
为了防止资源文件仅仅修改了名字重复上传,这边是将上传的文件名替换为了它的 MD5
cloud flare
的 R2 oss
是支持给文件加属性进去的,也可以直接加属性达到相同的效果啦~俺就是嫌麻烦了
链接修正
这部分就重新匹配啦~匹配完以后,根据存下来的映射关系做替换就好了~
大概就下面这些是重点吧,将资源文件的双链替换为正常markdown支持的语法,并且保留 [name|alias](url)
中 alias
对图片大小的控制(外链图片控制是在 quartz
中修改的,详见此文)
淦,写着写着就感觉不太对了,貌似我没必要刷两次文本!
也就是说,直接复制文件,然后用知识库的map刷一遍就好了……
下次再说~