我尝试使用以下cron
命令每周清理一次日志:
@weekly find /var/log/ \( -iregex ".*\.[2-20]+" -o -iname "*.gz" \) -exec rm {} \; 2>&1
好吗?
答案1
[2-20]+
不是测试数字是否在 from2
到范围内的正确方法20
。正则表达式中的方括号仅匹配与其中的任何字符相匹配的单个字符。并且-
在字符集中用于指定字符范围(例如2-9
或a-z
);范围2-2
与 相同2
。 So[2-20]+
相当于[20]+
, 匹配任意字符2
和序列0
,例如2
, 20
, 02
,2200
等。
它应该是([2-9]|1[0-9]|20)
。这与2
to中的单个数字匹配9
,1
后跟0
to9
或20
。
如果您使用的是 GNU find
,则可以使用-delete
运算符代替-exec rm {} \;
。
2>&1
如果您不重定向标准输出,则无需使用。默认情况下,标准输出和标准错误都作为邮件发送给用户。
@weekly find /var/log/ \( -iregex '.*\.([2-9]|1[0-9]|20)' -o -iname "*.gz" \) -delete