macOS Catalina 10.15 上的访问时间

macOS Catalina 10.15 上的访问时间

假设您在一台 UNIX 机器上拥有一个文件系统,并且您想知道在某个时间间隔内您访问过此系统上的哪些常规文件。(“常规文件”表示它不是目录。)没有修改,没有改变其状态,只是访问过。例如

  • 您正在收听一系列声音文件,并想知道今天已经打开了哪些文件。
  • grep您正在使用、less或查看文本文件的内容cat,并且想知道在过去 60 秒内您已经查看过哪些文件。

在某些 unix 系统上,类似这样的命令find . -atime -60s将回答该问题。这适用于 2015 年购买的运行 macOS Mojave 10.14.6 的 macbook pro。

但在 2020 年 3 月购买的运行 macOS Catalina 10.15.5 的 MacBook Pro 上,这不起作用。回想一下,该stat命令返回与文件关联的四个不同的“时间”:

  1. 访问时间或atime
  2. 修改时间或mtime
  3. 文件状态上次更改的时间或ctime
  4. birthtime

但在新 Mac 上,atime与常规文件完全相同ctime。下面可以看到差异。在这些示例中,我们还使用 来ls仔细检查从 获得的mtimectimestat。我们发现stat在两个版本的 macOS 中的行为有所不同。

macOS Mojave 10.14.6:


> ls -lT crit
-rw-r--r--  1 BNW  staff  1712 Jun 13 02:16:51 2020 crit
> ls -lTc crit
-rw-r--r--  1 BNW  staff  1712 Jun 17 18:40:25 2020 crit
> stat crit
16777220 8696326140 -rw-r--r-- 1 BNW staff 0 1712 "Jul 10 21:56:15 2020" "Jun 13 02:16:51 2020" "Jun 17 18:40:25 2020" "Jun 13 02:16:51 2020" 4096 8 0 crit
> stat -s crit
st_dev=16777220 st_ino=8696326140 st_mode=0100644 st_nlink=1 st_uid=501 st_gid=20 st_rdev=0 st_size=1712 st_atime=1594432575 st_mtime=1592029011 st_ctime=1592433625 st_birthtime=1592029011 st_blksize=4096 st_blocks=8 st_flags=0
> 

现在有了新的 macbook pro、macOS Catalina 10.15.5,atime返回的值stat与 相同ctime

> ls -lT z01
-rw-r--r--  1 kpr  staff  416397 Jun 16 12:03:11 2020 z01
> ls -lTc z01
-rw-r--r--  1 kpr  staff  416397 Jun 25 21:38:30 2020 z01
> stat z01
16777223 8163218 -rw-r--r-- 1 kpr staff 0 416397 "Jun 25 21:38:30 2020" "Jun 16 12:03:11 2020" "Jun 25 21:38:30 2020" "Jun 16 12:03:11 2020" 4096 816 0 z01
> stat -s z01
st_dev

因此,当我find在新电脑上使用时,它不再返回常规文件最近看过,只有目录其文件最近被访问过。

这是苹果开发人员有意识的选择吗?为什么要这样做?在 macos Catalina 下,还有其他方法可以通过访问时间查找常规文件吗?

相关内容