情景
有一个文件想要修改“创建时间”和“修改时间”:
网上普遍使用类 Unix 系统的命令 touch
来实现(预先说明,此普遍方法无法满足修改“创建时间”的需求。后文有使用 Setfile
命令这一可行的解决方法):
命令格式
touch [选项参数] < 文件名 >
命令参数
-
-t
使用指定的日期时间,修改文件的“atime(访问时间)”,“mtime(修改时间)“。 -
-a
或--time=atime
或--time=access
或--time=use
只修改 atime(访问时间)。 -
-m
或--time=mtime
或--time=modify
只修改 mtime(修改时间)。 -
-c
或--no-create
不建立任何文档,此参数将修改“atime(访问时间)”,“mtime(修改时间)“,“ctime(文件属性变更时间)”。 -
-d
使用指定的日期时间,而非现在的时间。 -
-f
此参数将忽略不予处理,仅负责解决 BSD 版本 touch 指令的兼容性问题。 -
-r
把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
关于 Linux 系统的 atime(访问时间),mtime(修改时间),ctime(文件属性变更时间),后文的“附录”部分有介绍。
e.g.
// 使用指定的时间(2020 年 02 月 03 日 12:30),修改文件的“atime(访问时间)”,“mtime(修改时间)“touch -t 202002031230 < 文件名 >
// 使用指定的时间(2020 年 02 月 03 日 12:30),修改文件的“修改时间”touch -mt 202002031230 < 文件名 >
不论是 touch -t
还是touch -mt
,执行完毕后:
仅修改了“修改时间”,但“创建时间”还是没有被修改。
原因是:touch -t
仅会当 指定的时间 在 原始创建时间 之前时,才会修改创建时间。
解决办法
使用 Setfile
命令。
Setfile
命令是一个 MacOS X 的开发者工具,它可以修改文件的 creation(创建时间)和 modification date(修改时间)。不过前提是,你的 MacOS 上必须已经安装了 Xcode。如果没有的话,可以去 Mac App Store 安装。你可以在 /usr/bin/SetFile
位置找到此命令行工具。
使用方法
Setfile -d '01/10/2020 11:00:00' < 文件名 >
执行后:
文件的“创建时间”修改成功!
附录
Linux | 文件的时间属性
在 Linux 系统下,文件的时间属性主要分为三种:
atime(访问时间):
也就是 Access time。读一次文件的内容,该文件的 atime 就会更新。比如常见的使用 more、cat 对该文件进行查看时,其 atime 将更新。
mtime(修改时间):
也就是 Modify time。对该文件进行内容上的修改,该文件的 mtime 就会更新。比如常见的使用 vi、vim 对文件进行修改后保存,其 mtime 将更新。
ctime(文件属性变更时间):
也就是 Change time。对该文件的属性状态进行修改,改文件的 ctime 就会更新。比如文件名、内容、大小、权限、所属组等改变时,其 ctime 将更新。
ll 或 ls 命令查看文件的时间属性
-
ll --time=atime
或ls -lu
命令查看 atime(访问时间) -
ll
或ls -l
命令查看 mtime(修改时间) -
ll --time=ctime
或ls -lc
命令查看 ctime(文件属性变更时间)
stat 命令查看文件的时间属性
可以使用 stat
命令同时查看文件的三种属性
find 命令查找特定时间要求的文件
结合 find 命令可以查找特定时间要求的文件,例如查询最近 24 小时内修改过的文件:
find ./ -mtime -24
文件创建时间
Linux 常见的文件系统,没有文件创建时间属性,关于这一点,可以去网上看相关讨论。
引用
Linux | 文件的时间属性 – 嘉为科技的文章 – 知乎