“find -mtime”在具有不同时区的文件上无法正常工作?

我在几个月前的date在服务器上有一些文件,但find -mtime 7search。

当我把它们列为ls -l它们看起来很正常

 -rw-r--r-- 1 root root 347253 Jun 12 16:26 pedia_main.2010-06-12-04-25-02.sql.gz -rw-r--r-- 1 root root 490144578 Nov 24 16:26 gsmforum_main.2010-11-24-04-25-02.sql.gz 

顶部的文件是不可见的,“查找。-mtime 1”,但底部是可见的。

为了理解这一切,我差点被撞墙撞倒了。 我尝试了一些随机的东西,碰到了ls --full-time命令。 这表明,这两个有点不同

 -rw-r--r-- 1 root root 347253 2010-06-12 16:26:20.000000000 +0400 pedia_main.2010-06-12-04-25-02.sql.gz -rw-r--r-- 1 root root 490144578 2010-11-24 16:26:12.000000000 +0300 gsmforum_main.2010-11-24-04-25-02.sql.gz 

date似乎没有问题,第一个是时区+0400 ,另一个是+0300 。 如何find找不到+0400

OS是最新更新的CentOS 5.5 Final, ls版本是(GNU coreutils) 5.97

另外,事情是,我不明白这个文件的“时区”存储在哪里。 inode没有任何额外的属性来存储它们似乎。 服务器上的FS是ext4。

timzeone问题可能是一个红鲱鱼。

 find . -mtime 7 

应该find正好是七天的文件(“七”意味着在7.000和7.999天之间,给予或采取,“旧”意思是“自上次修改以来”)。 如果你想要的文件超过七天,从你的第一个文件(2010年6月)的date来看,尝试

 find . -mtime +7 

我同意你关于明显的时区是奇怪的,但我认为这是可以解释的。 man stat很清楚,像Sean R下面所说的那样存储time_t。 我们正在做的是把它当作当地时间显示出来,而且在这种情况下,考虑到当地的夏令时习俗,这种做法已经足够了。

我的系统是一样的:文件时间发生在3月到10月发生在+0100时区,而那些在10月 – 3月用+0000时区显示,不是因为它存储在文件系统,而是因为时区文件告诉我的系统在六月份,当我触摸文件的时候,我会在一个我认为是早上八点的时候完成它,而不是这个 – 如果今天是早上七点。 当我们展示恰好在夏天的时候,展现他们在夏天就会出现的时候,我们会很友善,就是这样。

如果你可以根据你当地的习惯在你的ls输出中find任何夏天和冬天都没有的时区,那么我错了 – 但是在我的系统上找不到任何时区。

随着发现,-mtime在24小时内如此工作

 -mtime 0 or -mtime -1 mean today -mtime 3 would mean 3 days old -mtime +1 means greater than one day old -mtime -7 means less than 7 days old 

为了解释它的时区部分(“mtime”讨论由其他评论处理)…

date和时间自UTC 1970年1月1日午夜起以秒为单位存储在文件中。 意思是没有与他们有关的时区。 然后,程序使用/ etc / timezone中的系统时区设置,除非被“TZ”环境variables覆盖,否则在当地时区显示该时间:

 chats:/tmp$ touch foo chats:/tmp$ ls -l foo -rw-r--r-- 1 jafo jafo 0 Dec 1 06:14 foo chats:/tmp$ TZ=GMT ls -l foo -rw-r--r-- 1 jafo jafo 0 Dec 1 13:14 foo chats:/tmp$ 

注意在最后一行显示1:14 pm,而在上面的输出中,我使用的是美国山地时间(GMT-0700)的默认时区,显示的是上午6:14。 不同之处在于第二个“ls”我将TZ环境variables设置为GMT。

您可能需要使用“stat”来检查与文件相关的所有时间/date。

除上述之外,我经常使用以下内容:

 find -mtime -7 -daystart 

这就告诉findfind从今天开始到(7 * 24)小时的文件。