[2-20]+
não é a maneira correta de testar se um número está no intervalo de 2
a 20
. Os colchetes em uma expressão regular correspondem a um único caractere que corresponde a qualquer um dos caracteres dentro dele. E -
no conjunto de caracteres é usado para especificar um intervalo de caracteres (por exemplo, 2-9
ou a-z
); o intervalo 2-2
é igual a apenas 2
. Portanto, [2-20]+
é equivalente a [20]+
, corresponde a qualquer sequência dos caracteres 2
e 0
, como 2
, 20
, 02
, 2200
, etc.
Deve ser ([2-9]|1[0-9]|20)
. Isso corresponde a um único dígito de 2
a 9
, 1
seguido de 0
a 9
ou 20
.
Se você estiver usando o GNU find
, você pode usar o operador -delete
em vez de -exec rm {} \;
.
E não há necessidade de usar 2>&1
se você não estiver redirecionando a saída padrão. Por padrão, a saída padrão e o erro padrão são enviados como mensagem para o usuário.
@weekly find /var/log/ \( -iregex '.*\.([2-9]|1[0-9]|20)' -o -iname "*.gz" \) -delete