咨询一个关于文件创建时间的问题

大家好, 请教一个关于obsidian中文件创建时间的问题。

我今天把我的obsidian库从一台电脑迁移到另外一台电脑了,迁移直接就是把obsidian的库文件打包移动了。 obsidian有一些dataview的代码片段会罗列每周新增的文件(基于dataview的时间,没有使用yml元数据)。

迁移到新电脑后,发现daview的代码片段失效了,初步看了一下发现,dataview中取的时间应该是dataview插件更新的元数据(包括创建时间、修改时间)。移动到新电脑后,发现所有的文件的创建时间都变成了今天,导致dataview失效。

关于这个库移动后,有什么办法可以使用保留之前文件的创建时间?

之前也遇到过这个问题,问题原因应该就是这种系统层级的元数据会因为对文件的修改和移动改变。目前我没发现其他解决办法,就只能把创建时间和修改时间直接写到yaml里。

能给一个这样的yaml的模板么 谢谢:pray:

给你两个方案:

  1. zip 压缩然后解压到你想要的位置。zip 压缩文件被解压时会保留元信息。当然这样比较麻烦。
  2. Windows 用户可以试试用 Robocopy 工具复制,这个是内置的命令行工具,但我记得也有图形界面,可以搜索一下 Robocopy GUI。别的平台应该也有类似的工具。

但我还是建议你尽早把日期写进笔记中,对应的 dataview 查询也改掉。(推荐用 ISO 8601 这类标准格式记录。)
有个叫 linter 的插件可以在你 Ctrl+S 主动保存时自动修改 yaml。你可以在迁移前安装这个插件,把它的别的设置都关上,只启用自动更新日期的那个选项,然后执行 Linter: Lint all files in the vault 命令。(建议执行前用我上面提到的方案做好备份,比如打一个 zip 包当临时快照保留一段时间,免得出什么意外。)
当然应该还有别的类似的插件能做到类似的事,这个我就不清楚了。

---
create_time: <% tp.date.now("YYYYMMDDHHmmss") %>
modified_time: 
---

我这个是使用 templater 插件的。使用内置模板插件也可以实现。具体时间格式可以自行调整。

修改时间我是用输入法快捷键实现的。不过楼上提到的 linter 插件应该更方便。

我这边暂时使用了linter的插件来管理我的yaml区域,目前linter插件已经满足了我大部分的诉求了。

但是随着引入了yaml区域的概念, 一个头疼的问题就是如何管理yaml的tags。

目前在yaml区,必须要通过“#” 才能够进行tag联想, 可是这样的话必须要手动的删除掉#,否则在预览模式下 tags的信息是不会显示出来。

关于yaml的tags管理,目前有没有什么比较好的方式

我目前用的方式是同时使用Obsidian自带的tag和yaml的tag,Linter插件可以设置自动提取正文中的tag并加到yaml区。我的基本流程就是每次先在正文手动输入笔记tag,之后保存时Linter自动同步配置到yaml中

1 个赞