使用 Setfile 命令修改 MacOS 文件创建时间 (creation date),(非 touch 命令),附 Linux 文件时间属性介绍

情景

有一个文件想要修改“创建时间”和“修改时间”:

待修改的文件

网上普遍使用类 Unix 系统的命令 touch 来实现(预先说明,此普遍方法无法满足修改“创建时间”的需求。后文有使用 Setfile 命令这一可行的解决方法):

命令格式

touch [选项参数] <文件名>

命令参数

关于 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 命令,仅修改了修改时间

仅修改了“修改时间”,但“创建时间”还是没有被修改。

原因是: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' <文件名>

执行后:

使用 Setfile 命令,文件的创建时间修改成功

文件的“创建时间”修改成功!

附录

Linux | 文件的时间属性

在 Linux 系统下,文件的时间属性主要分为三种:

atime(访问时间):

也就是 Access time。读一次文件的内容,该文件的 atime 就会更新。比如常见的使用 more、cat 对该文件进行查看时,其 atime 将更新。

mtime(修改时间):

也就是 Modify time。对该文件进行内容上的修改,该文件的 mtime 就会更新。比如常见的使用 vi、VIM 对文件进行修改后保存,其 mtime 将更新。

ctime(文件属性变更时间):

也就是 Change time。对该文件的属性状态进行修改,改文件的 ctime 就会更新。比如文件名、内容、大小、权限、所属组等改变时,其 ctime 将更新。

ll 或 ls 命令查看文件的时间属性

stat 命令查看文件的时间属性

可以使用 stat 命令同时查看文件的三种属性

stat 命令查看文件的时间属性

find 命令查找特定时间要求的文件

结合 find 命令可以查找特定时间要求的文件,例如查询最近 24 小时内修改过的文件:

find ./ -mtime -24

ll --time=ctime </code>或 ls -lc </code>命令查看 ctime(文件属性变更时间)

文件创建时间

Linux 常见的文件系统,没有文件创建时间属性,关于这一点,可以去网上看相关讨论。

引用

Linux | 文件的时间属性 - 嘉为科技的文章 - 知乎

2 操作
JellyfishMIX 在 2020-06-24 07:47:38 更新了该帖
JellyfishMIX 在 2020-06-24 07:40:51 更新了该帖

赞助商 我要投放

3 回帖
请输入回帖内容 ...
  • 88250 1 1 赞同
    1. 社区 Markdown 渲染支持 <img> 标签,这是 Markdown 规范里定义需要实现的
    2. 但目前社区不支持使用外链图片,发布时如果发现外链图片时会报错提示

    1 回复
  • 其他回帖
  • JellyfishMIX

    @88250 D 大,HacPai 好像不支持 <img> 标签显示图片,文章里的 <img> 标签是 Typora 插入图片,设置比例后生成的。我发现思否也是不支持 <img> 标签显示图片。

    截屏 20200623 下午 7.04.00.png

    1 回复
  • JellyfishMIX

    明白了,谢谢 D 大的回复!