You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Linux下保留并查看.txt文件的原始创建时间(crtime)?

如何在Linux下保留并查看.txt文件的原始创建时间(crtime)?

我完全懂你的困扰——用纯文本记笔记够轻便够高效,但每次编辑保存后,原本的创建时间就被覆盖,想找回最初创建文件的时间却处处碰壁,确实挺闹心的。咱们来拆解问题,一步步找自动化的解决办法:

先搞懂为什么你现在看不到真实的创建时间

你提到用stat看不到创建时间,debugfs里的crtime和修改时间一致,核心原因是:大多数默认文本编辑器的“保存”操作,本质是先删除原文件,再新建一个同名文件来替换它。对ext4文件系统来说,这个“新建”的文件会被当成全新的文件,它的crtime(创建时间)就会被更新成最后一次保存的时间,而不是你最初创建文件的时间。

自动化解决方案分两种情况

情况1:还没覆盖文件,想从现在开始保留原始创建时间

调整编辑器的保存行为,让它直接修改原文件内容,而不是删除后重建:

  • 如果你用Vim:在~/.vimrc配置文件里添加一行:
    set backupcopy=yes
    
    这样Vim保存时会直接修改原文件的内容,而不是生成临时文件替换原文件,文件的原始crtime就能一直保留。
  • 如果你用Gedit(GNOME默认编辑器):可以开启“保留备份副本”功能(在设置→编辑器→保存里找),或者安装gedit-backup插件。开启后,每次保存都会生成一个备份文件,原文件的crtime不会被改动,你可以通过原文件查看创建时间,备份文件追踪修改记录。

情况2:已经覆盖过文件,原始crtime已丢失,想补录或追踪创建时间

如果文件已经被多次保存覆盖,原始的crtime已经找不回来了,可以用下面两种方法自动化记录创建时间:

  • 用文件扩展属性手动记录创建时间:写一个简单的shell脚本,以后用它来创建新笔记,脚本会自动把创建时间存在文件的扩展属性里,不管怎么编辑都不会变。
    新建一个note.sh脚本:
    #!/bin/bash
    if [ -z "$1" ]; then
        echo "用法: $0 <笔记文件名.txt>"
        exit 1
    fi
    # 创建新文件
    touch "$1"
    # 记录当前时间为创建时间,存入扩展属性
    creation_time=$(date +"%Y-%m-%d %H:%M:%S")
    setfattr -n user.creation_time -v "$creation_time" "$1"
    # 打开编辑器编辑文件
    xdg-open "$1"
    
    给脚本加执行权限:chmod +x note.sh,以后创建新笔记就用./note.sh 我的笔记.txt。查看创建时间时,用getfattr -n user.creation_time 我的笔记.txt即可。
  • 用Git做版本控制:虽然对单文件笔记来说有点“大材小用”,但它能自动追踪所有修改历史和文件的首次创建时间。初始化一个仓库,每次创建或修改笔记后提交,查看创建时间可以用:
    git log --follow --format="%ai" 我的笔记.txt | tail -1
    
    这个命令会输出文件第一次被提交的时间,也就是原始创建时间,同时你还能随时回溯之前的版本。

最后说一句

手动给每个笔记加日期确实太繁琐,上面这些方法都能帮你自动化搞定,不用再手动操心时间记录的事儿~

备注:内容来源于stack exchange,提问作者JMike

火山引擎 最新活动