WSL中通过fs.stat获取文件的birthtime不正确的原因

4 篇文章 0 订阅
1 篇文章 0 订阅

原由

起初是在WSL中开发一个静态博客项目,想要偷个懒,想直接通过fs.stat()获取文件的创建时间来生成文章的时间线排序,包括更新时间

不对劲

当我更改了一个md文件的内容时,我发现时间线发生变化了,我是通过(await fs.stat(filePath)).birthtimeMs获取文件创建时间的,但是我发现这个值竟然在我改动过文件后变化了,变成了我改变文件的时间戳,白丝不の七姐(bushi)

找原因

通过stat命令一查看,我惊呆了,文件的Birth竟然是-,你没看错就是一个杠

  Size: 2477            Blocks: 8          IO Block: 4096   regular file
Device: 810h/2064d      Inode: 148374      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     ldl)   Gid: ( 1000/     ldl)
Access: 2021-11-08 16:35:59.405414600 +0800
Modify: 2021-10-28 09:36:18.918000000 +0800
Change: 2021-10-28 09:36:18.913397200 +0800
 Birth: -

各种让我一通找之后,起初以为是WSL下的文件系统的问题,具体可以查看github上别人19年的时候提的一个issue:stat.birthtime is incorrect under WSL · Issue #30860 · nodejs/node (github.com),后来发现不对,在我的Ubuntu服务器上也是一样的现象,属实给我惊呆了,后来看到论坛有人说只要是基于Debian的发行版的,都无法拿到文件的准确的创建时间;还有一种方法:拿到Ext4文件系统的crtime获取到创建时间:步骤是先用ls -i拿到文件的inode,然后df .查看当前挂载位置/dev/vda1,最后通过sudo debugfs -R 'stat <inode> /dev/vda1查看文件的crtime,vim改了下文件,一看还是跟着四个time全变,无解了!

本人测试在win上和基于archmanjaro的是正常的。

总结

还是老老实实在win上开发吧,不要用Ubuntu,也可以用manjaro,真的无奈gym!
欢迎关注我的公众号:Senar
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值