为什么 find 没有排除旧文件?

为什么 find 没有排除旧文件?

我想从我的 apache 日志中复制所有少于 43 天前创建的 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 参数不适用?

答案1

这些文件被轮换,在此过程中它们的 ctime 发生了变化。每次你修改touch文件或更改其内容时,你都会修改它的时间戳,从而覆盖旧时间戳。这会误导你的 find 命令。

ls列表显示mtime;因为这是 ls 默认显示的内容,除非-c指定了 (ctime) 标志

因此从本质上来说;你的ctime 标准匹配文件和ls 显示 mtime

因此,尝试将 find 命令调整为类似

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

它应该能按你预期的那样工作

相关内容