如何在Linux下保留并查看.txt文件的原始创建时间(crtime)?
如何在Linux下保留并查看.txt文件的原始创建时间(crtime)?
我完全懂你的困扰——用纯文本记笔记够轻便够高效,但每次编辑保存后,原本的创建时间就被覆盖,想找回最初创建文件的时间却处处碰壁,确实挺闹心的。咱们来拆解问题,一步步找自动化的解决办法:
先搞懂为什么你现在看不到真实的创建时间
你提到用stat看不到创建时间,debugfs里的crtime和修改时间一致,核心原因是:大多数默认文本编辑器的“保存”操作,本质是先删除原文件,再新建一个同名文件来替换它。对ext4文件系统来说,这个“新建”的文件会被当成全新的文件,它的crtime(创建时间)就会被更新成最后一次保存的时间,而不是你最初创建文件的时间。
自动化解决方案分两种情况
情况1:还没覆盖文件,想从现在开始保留原始创建时间
调整编辑器的保存行为,让它直接修改原文件内容,而不是删除后重建:
- 如果你用Vim:在
~/.vimrc配置文件里添加一行:
这样Vim保存时会直接修改原文件的内容,而不是生成临时文件替换原文件,文件的原始set backupcopy=yescrtime就能一直保留。 - 如果你用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




