Linux

為什麼 find 不排除舊文件?

  • November 13, 2014

我想從不到 43 天前創建的 apache 日誌中複製所有 gzip 文件。

作為測試,我只是從 find 中列出了我的文件:

sudo find /var/log/apache2/ -mindepth 1 -ctime -43 -name "*.gz" -ls

但結果包括一直到 8 月(設置伺服器時)創建的文件以及較新的文件:

8781890    4 -rw-r-----   1 root     adm           186 Aug 10 06:44 /var/log/apache2/error.log.13.gz
8781923    4 -rw-r-----   1 root     adm          1717 Aug 17 06:29 /var/log/apache2/error.log.12.gz

stat /var/log/apache2/error.log.13.gz
 File: `/var/log/apache2/error.log.13.gz'
 Size: 186             Blocks: 8          IO Block: 4096   regular file
 Device: 807h/2055d      Inode: 8781890     Links: 1
 Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (    4/     adm)
 Access: 2014-11-13 10:34:14.444059675 +1030
 Modify: 2014-08-10 06:44:11.000000000 +0930
 Change: 2014-11-09 06:29:48.035930468 +1030

為什麼 ctime 參數不適用?

這些文件被輪換了,在這個過程中他們的 ctime 發生了變化。每次您touch創建文件或更改其內容時,您都將修改它的時間戳,這將覆蓋舊的時間戳。這會誤導您的 find 命令。

ls列表顯示mtime;因為這是 ls 預設顯示的內容,除非-c指定 (ctime) 標誌

所以本質上;您的ctime 條件與文件匹配,並且ls 顯示 mtime

因此,嘗試將您的 find 命令調整為類似

sudo find /var/log/apache2/ -mindepth 1 -mtime -43 -name “*.gz” -ls

它應該可以按您的預期工作

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