Mik*_*ell 5 unix linux centos find-util
因此,我正在编写一个 bash 脚本来清除临时文件,但遇到了无法解释的行为。
# Find using mmin flag
find /usr/local/store/file/temp/3_day/ -mmin +$((60*24*3)) -type f > /tmp/old_files_by_mmin.txt
# Find using mtime flag
find /usr/local/store/file/temp/3_day/ -mtime +3 -type f > /tmp/old_files_by_mtime.txt
diff -u /tmp/old_files_by_mmin.txt /tmp/old_files_by_mtime.txt
Run Code Online (Sandbox Code Playgroud)
前几行:
--- /tmp/old_files_by_mmin.txt 2016-08-03 16:56:42.535458820 +0000
+++ /tmp/old_files_by_mtime.txt 2016-08-03 16:56:58.310681524 +0000
@@ -117,59 +117,6 @@
/usr/local/store/file/temp/3_day/image/resize/2016/07/29/11/15/36/1296924350
/usr/local/store/file/temp/3_day/image/resize/2016/07/29/11/47/52/1950191632
/usr/local/store/file/temp/3_day/image/resize/2016/07/29/11/30/01/711250694
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/04/15/44313759
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/04/15/1589177813
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/04/15/1189074525
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/10/56/44/91382315
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/09/43/45/1622776054
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/44/57/1465920226
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/23/17/1467026748
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/15/58/1990201487
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/13/19/1990298215
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/01/35/59/518813467
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/12/10/53/1962045410
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/12/31/27/290517373
-/usr/local/store/file/temp/3_day/image/resize/2016/07/31/12/05/08/547481306
Run Code Online (Sandbox Code Playgroud)
为什么 -mmin 标志拾取 mtime 标志没有拾取的文件?如果两者都应该找到比现在 + 3 天更旧的文件?
考虑到实现之间的区别,值得了解一下POSIX 的find强制标准:
-mtime n如果从初始化时间中减去文件修改时间除以 86400(丢弃任何余数)为 n,则主项应评估为 true。
同样,根据手册(对于 BSD find):
-mtime n[smhdw]如果未指定单位,则如果文件上次修改时间与查找开始时间之间的差异(四舍五入到下一个完整 24 小时周期)为
n24 小时周期,则此主项评估为 true。
...因此:在 BSD 中find,默认行为是四舍五入到完整的 24 小时周期。
对于 GNU find,有一个可配置性的衡量标准;看-daystart:
-daystart从今天开始而不是从 24 小时前开始测量时间(对于 -amin、-atime、-cmin、-ctime、-mmin 和 -mtime)。此选项仅影响稍后出现在命令行上的测试。
但是,默认行为如 的定义中所示-atime:
-atime n文件上次访问时间为
n*24 小时前。当find计算上次访问文件是在多少个 24 小时周期之前,任何小数部分都会被忽略,因此为了匹配-atime +1,文件必须至少在两天前被访问过。