为什么“find -mtime”在不同时区的文件上不能按预期工作?

Vla*_*sny 7 linux find centos timezone mtime

我在服务器上有几个月前的日期的一些文件,但它们是不可见的find -mtime 7搜索。

当我用 列出它们时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
Run Code Online (Sandbox Code Playgroud)

“find .-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
Run Code Online (Sandbox Code Playgroud)

日期好像没问题。一个位+0400作为时区,另一个位是+0300. 为什么find找不到带有 的那些+0400

操作系统是最新更新的CentOS 5.5 Final,ls版本是(GNU coreutils) 5.97.

另外,问题是我不明白文件的这个“时区”存储在哪里。该索引节点没有任何额外的属性来存储它们看起来。服务器上的文件系统是ext4

Mad*_*ter 17

时区问题可能是一个红鲱鱼。

find . -mtime 7
Run Code Online (Sandbox Code Playgroud)

应该找到恰好 7 天前的文件(“7”表示介于 7.000 和 7.999 天之间,给予或接受,“old”表示“自上次修改以来”)。如果您想要超过 7 天的文件,根据您的第一个文件(2010 年 6 月)上的日期来判断,请尝试

find . -mtime +7
Run Code Online (Sandbox Code Playgroud)

我同意你关于明显的时区很奇怪的看法,但我认为这是可以解释的。 man stat很明显,存储了一个 time_t,正如 Sean R 在下面所说的那样。什么ls是做的是显示以本地时间,它是一种足以当它这样做,考虑到当地夏令公约。

我的系统是一样的:3 月至 10 月的文件时间显示为 +0100 时区,而 10 月至 3 月的文件时间显示为 +0000 时区,不是因为它存储在文件系统中,而是因为时区文件告诉我的系统,在 6 月份,当我触摸该文件时,我会在我认为是早上 8 点而不是早上 7 点的时间完成它,如果它是冬天的话。 ls很好,当显示恰好在夏天的时间时,将它们显示为它们在夏天出现的样子,仅此而已。

如果ls根据当地惯例,您可以在输出中找到不是夏季或冬季的任何时区,那么我错了 - 但我在我的系统上找不到任何时区。