![为什么 find 没有排除旧文件?](https://linux22.com/image/645856/%E4%B8%BA%E4%BB%80%E4%B9%88%20find%20%E6%B2%A1%E6%9C%89%E6%8E%92%E9%99%A4%E6%97%A7%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我想从我的 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
它应该能按你预期的那样工作