文章转载自:https://blog.csdn.net/ligeforrent/article/details/75352245
最近需要在linux下,某目录中筛出所有mtime < 今天的文件。于是有了这篇博文。
find {path} -mtime {days}
-
本能地使用find -mtime +1 命令。使用后发现,筛出的一直是修改时间为48小时以外的文件。经过研究man find,亲自试验,得到了如下结论。
-
find -mtime -1
find -mtime 1
find -mtime +1
find在修改时间处使用的是排除法,上述三个出现的文件不会有交集。
-1是24小时之内操作过的;1是24小时之外,48小时之内操作过的;+1是48小时之外操作过的.
如果有文件同时符合两个或三个,优先出现在第一个,不会出现在第二个或第三个。比如有文件从三天前到今天一直在append,那么只会出现在find -mtime -1里。
基于此,find -mtime +1只能得到48小时之外的文件,不符合我的要求。
find {path} -newermt {time}
其实find -newermt的真正形式是find -newerXY {variable},旨在找到一些X属性比variable的Y属性更早的文件。其中X指代find的目标文件属性,Y代表参照属性。X可选a,c,m;Y可选a,c,m,t。acm意义分别为atime(访问时间),ctime(改变时间),mtime(修改时间)。t代表客观绝对时间,只作为参照属性存在,格式为yyyy-MM-dd hh:mm:ss。
由于我想要找到除了今天修改的文件之外的文件,只需要
1. 筛出mtime为今天的文件:find {path} -newermt `date +%F` -type f
2. 进行反选,在find中加入 !
所以得到的最终命令为
find {path} ! -newermt \`date +%F\` -exec {order} {} \;
最后一组{}表示exec之前筛到的文件。
结论:find -mtime更适合筛选以小时为单位(相对时间)的时间区间。对于以绝对时间(如自然日)为单位的时间区间,更适合使用find {path} (!) -newermt -type f