如何在 find 命令中使用 or 条件

如何在 find 命令中使用 or 条件

现在我想查找大小大于25MB且日期为前7天的文件,如何使用or?现在我是这样写的:

find /var/lib/docker/ -type f ( -size +25M -or -mtime +7 ) -name *.log

但它不起作用。

答案1

假设您实际上是指 OR(您的文本表示 AND),那么您的命令看起来是正确的,除了需要*.log引用模式之外。 and()需要加引号或转义,以便 shell 不认为它是子 shell:

find /var/lib/docker/ -type f \( -size +25M -o -mtime +7 \) -name '*.log'

使用'(' ... ')'也可以,就像使用双引号一样。

如果不引用*.log,shell 将在执行之前尝试针对当前目录中的所有文件名扩展该模式find

在上面的命令中,我选择使用-o而不是非标准的-or

如果您关心效率,您可以将测试重新安排为

find /var/lib/docker/ -name '*.log' -type f \( -size +25M -o -mtime +7 \)

这意味着find不必使用stat调用来获取每个文件的大小和时间戳,除非它们的名称匹配*.log

相关内容