我正在尝试确定文件访问时间在默认情况下是如何维护的Mac OS X,因为我正在尝试诊断我在新MBP 一体式机身(运行 Snow Leopard,10.6.2):
症状(深入到似乎导致问题的具体行为):
- mutt 无法切换到最近收到新邮件的邮箱
- 邮件由 procmail 传送,它会更新正在更新的 mbox 文件夹的 mtime,但不会改变 atime(新邮件检测的工作原理如下:通过比较 atime 和 mtime)
- 然而,时光网和时间mbox 文件正在更新
通过测试,似乎无法atimes
在文件系统中单独设置:
: [ether@tequila ~]$; touch test
: [ether@tequila ~]$; touch -m -t 200801010000 test2
: [ether@tequila ~]$; touch -a -t 200801010000 test3
: [ether@tequila ~]$; ls -l test*
-rw------- 1 ether staff 0 Dec 30 11:42 test
-rw------- 1 ether staff 0 Jan 1 2008 test2
-rw------- 1 ether staff 0 Dec 30 11:43 test3
: [ether@tequila ~]$; ls -lu test*
-rw------- 1 ether staff 0 Dec 30 11:42 test
-rw------- 1 ether staff 0 Dec 30 11:43 test2
-rw------- 1 ether staff 0 Dec 30 11:43 test3
test2 文件是用 old 创建的mtime
,并且将atime
设置为 now(因为它是一个新文件),这是正确的。但是,test3 是用 old 创建的atime
,但文件上设置不正确。为了确保这不仅仅是在新文件中看到的行为,让我们修改一个旧文件:
: [ether@tequila ~]$; touch -a -t 200801010000 test
: [ether@tequila ~]$; ls -l test
-rw------- 1 ether staff 0 Dec 30 11:42 test
: [ether@tequila ~]$; ls -lu test
-rw------- 1 ether staff 0 Dec 30 11:45 test
因此看起来 atimes 无法明确设置(当提交mtime
或atime
修改时它总是被重置为“现在”)。
这是文件系统本身固有的东西吗?是可以改变的东西吗?或者我完全疯了并且找错了地方?
PS. 的输出mount
是:
: [ether@tequila ~]$; mount
/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
...并且磁盘实用程序显示该驱动器的类型为“Mac OS 扩展(日志式)”。
答案1
来自man touch
(雪豹上):
Change the modification time of the file. The access time of the
file is not changed unless the -a flag is also specified.
更重要的是,它对我来说很好用:
betelgeuse:tmp james$ touch test
betelgeuse:tmp james$ touch -m -t 200801010000 test2
betelgeuse:tmp james$ touch -a -t 200801010000 test3
betelgeuse:tmp james$ ls -lu test*
-rw-r--r-- 1 james wheel 0 31 Dec 07:41 test
-rw-r--r-- 1 james wheel 0 31 Dec 07:41 test2
-rw-r--r-- 1 james wheel 0 1 Jan 2008 test3
betelgeuse:tmp james$ ls -l test*
-rw-r--r-- 1 james wheel 0 31 Dec 07:41 test
-rw-r--r-- 1 james wheel 0 1 Jan 2008 test2
-rw-r--r-- 1 james wheel 0 31 Dec 07:41 test3
betelgeuse:tmp james$
另一方面,当我在 ~ 中尝试同样的事情时,我得到了与您相同的结果:
betelgeuse:~ james$ touch test
betelgeuse:~ james$ touch -m -t 200801010000 test2
betelgeuse:~ james$ touch -a -t 200801010000 test3
betelgeuse:~ james$ ls -lu test*
-rw-r--r-- 1 james staff 0 31 Dec 07:42 test
-rw-r--r-- 1 james staff 0 31 Dec 07:42 test2
-rw-r--r-- 1 james staff 0 31 Dec 07:42 test3
区别是什么?Spotlight 不会索引 /tmp,但会索引 ~。我很确定您在这里看到的是 Spotlight 在您更改 atime 后读取文件以对其进行索引 - 然后将 atime 重新设置为现在。
解决方案很简单:只需将您不想索引的目录添加到不应索引的 Spotlight 文件夹列表中。
为了确认情况确实如此,我创建了一个名为“nospotlight”的新目录并告诉 Spotlight 不要对其进行索引。
betelgeuse:nospotlight james$ ls -l *
-rw-r--r-- 1 james staff 0 31 Dec 07:47 test
-rw-r--r-- 1 james staff 0 1 Jan 2008 test2
-rw-r--r-- 1 james staff 0 31 Dec 07:47 test3
betelgeuse:nospotlight james$ ls -lu *
-rw-r--r-- 1 james staff 0 31 Dec 07:47 test
-rw-r--r-- 1 james staff 0 31 Dec 07:47 test2
-rw-r--r-- 1 james staff 0 1 Jan 2008 test3
授予 Spotlight 索引权限,仅仅几秒钟后:
betelgeuse:nospotlight james$ ls -lu *
-rw-r--r-- 1 james staff 0 31 Dec 07:48 test
-rw-r--r-- 1 james staff 0 31 Dec 07:48 test2
-rw-r--r-- 1 james staff 0 31 Dec 07:48 test3
再次修改 mtime 会导致 atime 更新。
这绝对是 Spotlight。