在 Red Hat Linux 系统上,我有一个包含数百个文件的目录。我想删除所有超过 24 小时的文件。我使用 执行了删除操作find . -type f -mtime +1 -delete
。很简单,对吧?然后,在检查结果时,我发现ls -l
报告目录中超过 24 小时的文件。请记下下面的日期以及最后一次查找的结果:
> date
Sun Jan 5 19:02:43 PST 2014
> find . -type f -mtime +1 | wc -l
0
> find . -type f | xargs /bin/ls -l | grep 'Jan 3' | wc -l
70
奇怪的是,没有超过 48 小时的文件。(之前肯定有。)然而,此时,我真的被难住了。我可能忽略了一些显而易见的东西,但是什么呢?有人能告诉我吗?
答案1
对于find
,“+1”表示大于 1。此外,当计算天数的年龄时,它会向下舍入到最接近的整数。
此行为记录在手册页中:
当 find 确定文件上次访问是在多少个 24 小时前时,任何小数部分都会被忽略,因此为了匹配 -atime +1,文件必须至少在两天前被访问过。
在您的示例中,这两个整天意味着它应该只找到早于 1 月的文件 319:02:43。1 月 3 日之后创建的任何文件都无法找到。
因此,当您写道“奇怪的是,没有超过 48 小时的文件”时,这意味着它的find
行为完全符合记录,无论它有多么不正常。