Mac OS X中是否未正确维护文件访问时间?


1

我正在尝试确定默认情况下Mac OS X中文件访问时间是如何维护的,因为我正在尝试诊断我在新的MBP Unibody(运行Snow Leopard,10.6.2)中看到的一些奇怪的行为:

症状(深入到导致问题的特定行为):

  • mutt无法切换到最近收到新邮件的邮箱
  • 邮件由procmail提供,它更新正在更新的mbox文件夹的mtime,但不会改变atime(这是新邮件检测的工作原理:通过比较atime和mtime)
  • 但是,mbox文件的mtimeatime都会更新

通过测试,似乎无法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文件是用旧的创建的mtime,并且atime设置为now(因为它是一个新文件),这是正确的。但是,test3是使用旧版本创建的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(当提交任何一个mtimeatime修改时,它总是重置为“now” )。

这是文件系统本身固有的东西,是可以改变的东西,还是我完全疯了,看错了地方?

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 Extended(Journaled)”。


运行touch命令后,echo $?报告是什么?
约翰T

所有命令报告$?= 0。
以太于2009年

Answers:


5

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,但它确实索引〜。我很确定你在这里看到的是聚焦读取文件以便在更改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。


确认!如果将mail /添加到Spotlight的“隐私”列表中,并且mutt / procmail按预期工作,则atime将保持不变。令我感到沮丧的是,Spotlight并不能很好地解决这个问题 - 否则它会扼杀开始时间的目的。:(
以太

嗯,它确实警告你事实是窥探你的mutt文件夹:p
James Polley
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.