Linux

為什麼“find -mtime”在具有不同時區的文件上不能按預期工作?

  • January 11, 2020

我在伺服器上有一些文件,日期是幾個月前,但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

頂部文件對“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

日期好像沒問題。第一個位具有+0400時區,另一個是+0300. 怎麼find找不到有的+0400

作業系統為CentOS 5.5 Final,最新更新,ls版本為(GNU coreutils) 5.97.

另外,問題是我不明白文件的這個“時區”儲存在哪裡。inode似乎沒有任何額外的屬性來儲存它們。伺服器上的文件系統是ext4

時區問題可能是一個紅鯡魚。

find . -mtime 7

應該找到正好 7 天前的文件(“七”表示 7.000 到 7.999 天之間,給予或接受,“舊”表示“自上次修改以來”)。如果您想要超過 7 天的文件,根據您的第一個文件(2010 年 6 月)上的日期來判斷,請嘗試

find . -mtime +7

我同意你關於明顯時區奇怪的觀點,但我認為這是可以解釋的。 man stat正如 Sean R 所說,很明顯儲存了 time_t。正在做ls的是將其顯示為當地時間,並且在這樣做時考慮到當地的夏令時約定是很友好的。

我的系統是相同的:恰好落在 3 月至 10 月的文件時間顯示為 +0100 時區,而落在 10 月至 3 月的文件時間顯示為 +0000 時區,不是因為它儲存在文件系統中,而是因為時區文件告訴我的系統,在 6 月,當我觸摸文件時,我會在我認為是早上 8 點的時間完成它,而不是它-would-be-7am-if-it-were-winter。 ls很友善,當顯示恰好在夏天的時間時,以它們在夏天出現的方式顯示它們,僅此而已。

如果您可以ls根據當地慣例在輸出中找到不是夏季或冬季的任何時區,那麼我錯了 - 但我在我的系統上找不到任何時區。

引用自:https://serverfault.com/questions/207792