我运行这个命令
find BAR -type f -mtime +1095 # older than 3 years
并找到这个文件:
BAR/foo.pdf
所以我运行这个:
stat BAR/foo.pdf
Access: 2020-01-03 01:32:05.584393000 -0500
Modification: 2017-12-04 07: 59: 36.963225900 -0500
Change: 2020-01-02 10: 26: 28.907127100 -0500
# or
find BAR/foo.pdf -type f -printf "%p\n%a\n%c\n\n"
Fri Jan 3 01:32:05.5843930000 2020
Thu Jan 2 10:26:28.9071271000 2020
“访问”和“更改”日期小于 3 年
如果跑步
find BAR -type f -ctime +1095 # older than 3 years
一无所获
我想要的是删除任何 3 年内未使用(访问或更改或修改)的文件
PD:在示例中,仅满足 2 个标准。我希望我的命令搜索满足 3 个条件的文件: 超过 3 年未被访问、修改或更改的文件
引用这个答案:
find 的手册页说:
所以mtime对应Modify,而ctime对应Change。
根据统计数据,结果是正确的:
对于访问时间,您应该使用
atime
.find
使用隐式-a
(AND 运算符)组合测试。在您的命令中:已经有两个测试:
-type f
和-mtime +1095
。命令可以写成:您可以直接添加更多测试。例子:
如果文件与所有四个测试 (
-type f
,-ctime +1095
,-mtime +1095
,-atime +1095
) 匹配,则上述两个命令中的每一个都将打印文件的路径名。看起来这就是你想要的(但请注意,如果find BAR -type f -ctime +1095
什么都没有给你,那么添加更多必须匹配的测试也不会给你任何东西;这只是因为没有符合你的标准的常规文件,BAR
通常该命令可能会找到一些东西) .使用 (implicit or explicit)
-a
,如果之前的测试失败,则不会执行-a
之后的测试(因为它们无法更改结果)。-a
一些find
改变性能测试顺序的实现,尽量不破坏逻辑。还有
-o
(或运算符)。它的用法有时不直观,因为-a
优先(比较我的这个答案)。还有!
否定一个测试。一般来说,您可以结合多个测试来构建您想要的任何(?)逻辑(请参阅我的另一个答案的“理论”部分)。要实际删除您需要的文件
-delete
或-exec rm {} +
(请参阅此问题以了解差异)。