假设您在一台 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
命令返回与文件关联的四个不同的“时间”:
- 访问时间或
atime
- 修改时间或
mtime
- 文件状态上次更改的时间或
ctime
birthtime
但在新 Mac 上,atime
与常规文件完全相同ctime
。下面可以看到差异。在这些示例中,我们还使用 来ls
仔细检查从 获得的mtime
和ctime
值stat
。我们发现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 下,还有其他方法可以通过访问时间查找常规文件吗?